在我的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/

10-10 23:04