Flutter Provider 重新初始化模型

Flutter Provider reinitialize model

我使用 MultiProvider,然后创建我所有的模型。延迟加载已启用,因此当我打开我的页面小部件时,我的模型的构造函数在我调用 Provider.of<>(context) 时被调用。

这会初始化我的模型并且模型会获取新数据。

但是,当我弹出视图(小部件)并稍后重新访问视图(小部件)时,我遇到了以下问题,Provider.of<>(context) 是再次调用,但由于模型已经初始化,我从模型中获取了以前的数据(这很有用,因为我确实使用它来保留某些屏幕之间的状态)。

我需要重新初始化我的模型,因为我需要刷新我的数据并重置页面值,而且由于再也不会调用构造函数,所以我没有得到任何这些。

无论我做什么,如果我从 initState() / didChangeDependencies() 调用初始化方法,它总是出错,因为我在构建小部件时更改数据。

我正在寻找类似以下内容的内容:

MyChangeNotifier variable = MyChangeNotifier();

ChangeNotifierProvider.value(
  value: variable,
  child: child()
)

要重新初始化我的 class,但据我了解,这很糟糕,不知道在哪里调用它。

我不知道如何进行,如有任何帮助,我们将不胜感激。

所以我在 Provider 实际文档中找到了我要找的东西 here

关键是调用您的代码来更新 UI 或在 Future.microTask() 中触发重建。这只会在 future 完成后触发重建,而不会在小部件树仍在构建时触发重建。

@override
initState() {
  super.initState();
  Future.microtask(() =>
    context.read<MyNotifier>(context).getMyData(); // Or in my situation initialize the page.
  );
}