#android #flutter #sharedpreferences
#Android #flutter #sharedpreferences
Вопрос:
Я использую общие настройки для хранения и загрузки значений карты во Flutter, но получаю сообщение об ошибке
The following assertion was thrown building UserPro(dirty):
A non-null String must be provided to a Text widget.
'package:flutter/src/widgets/text.dart':
Failed assertion: line 360 pos 10: 'data != null'
Конечно, я понимаю, что общие настройки возвращают нулевое строковое значение, но я не понимаю почему, поскольку я жду значение. И как это исправить. Я прилагаю свой код с этим вопросом для вашей справки
—-Сохранение ——
void setUserValues() async{
SharedPreferences sharedPrefs = await SharedPreferences.getInstance();
currentUser.forEach((k,v)=>sharedPrefs.setString(k, v));
}
Здесь CurrentUser содержит карту, содержащую пользовательские данные, такие как «Имя», «Электронная почта» и т.д.
—-Загрузка ——
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
SharedPreferences localStorage;
class UserPro extends StatelessWidget{
final currentUser;
String name;
UserPro({this.currentUser}){
name=localStorage.getString("Name");;
}
static Future init() async{
localStorage = await SharedPreferences.getInstance();
}
@override
Widget build(BuildContext context) {
// TODO: implement build
return Scaffold(
body: Center(
child: Text(
name,
style: TextStyle(
fontSize: 15,
fontFamily: 'Berlin Sans FB',
fontWeight: FontWeight.bold,
),
),
),
);
}
}
Комментарии:
1. Вам нужно дождаться инициализации общих настроек. Где вы вызываете метод init()?
Ответ №1:
Используйте FutureBuilder
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
//SharedPreferences localStorage;
class UserPro extends StatelessWidget{
final currentUser;
//String name;
UserPro({this.currentUser});
@override
Widget build(BuildContext context) {
// TODO: implement build
return Scaffold(
body: Center(
child: FutureBuilder<SharedPreferences>(
future: SharedPreferences.getInstance(),
builder: (context,snapshot){
if (!snapshot.hasData) {
return CircularProgressIndicator();
}
return Text(
snapshot.data.getString("name"),
style: TextStyle(
fontSize: 15,
fontFamily: 'Berlin Sans FB',
fontWeight: FontWeight.bold,
),
),
},
),
),
);
}
}
Комментарии:
1. Мне нужна еще одна помощь, я получаю эту ошибку [ОШИБКА: flutter / lib / ui / ui_dart_state.cc(166)] Необработанное исключение: исключение MissingPluginException (Не найдена реализация для метода GetAll в плагинах канала. flutter.io/shared_preferences ) Я запустил очиститель flutter, pub get и стер данные эмулятора и запустил его снова, но снова получаю ту же ошибку
2. Для меня удаление приложения на эмуляторе и повторное создание проекта решает эту проблему. Часто случается, когда плагин используется в первый раз
3. Я снова стер данные эмулятора, очистил дерево сборки и холодно загрузил эмулятор, и я все еще получаю ту же ошибку, попытался понизить общие настройки с 0.5.10 до 0.5.9, но все еще получаю ту же ошибку
4. Было бы более полезно поднять проблему с репозиторием SharedPreferences на github