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.
);
}
我使用 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.
);
}