【发布时间】:2019-06-06 17:28:52
【问题描述】:
我正在重构应用程序以使用 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 时返回null:
class PageFive extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ScopedModelDescendant<UserModel>(
builder: (context, child, model) =>
Text('${model.name}'),
);
}
}
Text('${model.name}'),返回null
有人知道为什么name 返回null吗?
我一直在努力寻找解决方案,但不知道为什么。
【问题讨论】:
-
@pskink 是的。谢谢。我有更新问题。我不知道为什么
_name在调用时为空。
标签: dart flutter state state-management