Я использую приложение для рефакторинга scoped_model
, но у меня есть проблема. Состояние, кажется, не проходит правильно между виджетом.
Я начинаю с добавления ScopedModel
к вершине дерева виджетов при запуске.
@override
Widget build(BuildContext context) {
UserModel().initialiseValues();
return ScopedModel<UserModel>(
model: UserModel(),
child: MaterialApp(
home: new Page(),
),
);
}
Этот вызов .initialiseValues();
, поэтому модель читает из SharedPreferences
и сохраняет в переменных:
class UserModel extends Model {
String _name;
String get name => _name;
void initialiseValues() async {
SharedPreferences sharedPrefs = await SharedPreferences.getInstance();
_name = sharedPrefs.getString('name');
print(‘_name from sharedPrefs is $_name');
print(‘name from sharedPrefs is $name');
notifyListeners();
}
}
Оба оператора печати возвращают правильное имя.
Но когда я пытаюсь позвонить, используя ScopedModelDescendant
на другой странице, name
возвращает ноль:
class PageFive extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ScopedModelDescendant<UserModel>(
builder: (context, child, model) =>
Text('${model.name}'),
);
}
}
Text('${model.name}')
, возврат null
Кто-нибудь знает, почему name
возвращает ноль?
Я выгляжу трудно решить, но понятия не имею, почему.