在我的Flutter应用程序中,我有一个小部件
class HomeScreen extends StatelessWidget
使用模型
class HomeScreenModel extends ChangeNotifier
这两个对象使用ChangeNotifierProvider绑在一起。
当应用程序加载HomeScreen小部件时,我想调用HomeScreenModel的自定义init()函数以将磁盘中的某些数据异步加载到模型中,然后使用notifyListeners()函数通知监听器。这应该做一次。
调用此init()函数的正确位置是什么?
据我所知,对于无状态窗口小部件,没有生命周期函数仅调用一次。不过,我很确定HomeScreenModel的构造函数仅被调用一次。
从自己的构造函数中调用async HomeScreenModel.init()函数是否安全?
是否有关于如何将数据异步加载到以ChangeNotifier形式实现的模型中的最佳实践?
谢谢大家!
最佳答案
经过一些搜索和测试后,我选择从HomeScreenModel构造函数调用异步init函数。所以我有
HomeScreenModel(BuildContext context) {
var initFuture = init(context);
initFuture.then((voidValue) {
_log.d('init finished');
state = HomeScreenModelState.initialized;
notifyListeners();
});
}
初始化函数原型(prototype)是
Future<void> init(BuildContext context) async
我发现执行此操作的另一种方法是使用StatefulWidget并从
initState()
功能。该函数仅被调用一次,就像ChangeNotifier构造函数一样。
到目前为止,我还没有使用StatefulWidgets,因为在我看来它们在ui和业务逻辑之间形成了一种强大的耦合。因此,到目前为止,上述解决方案对我来说似乎还不错。
我希望它可以帮助某人
关于flutter - 将数据异步加载到Flutter中的ChangeNotifier模型中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57711050/