我使用MultiProvider,然后创建我所有的模型。启用了懒惰加载,因此当我打开我的页面widget时,我的模型的构造函数在我调用 Provider.of<>(context).
这就初始化了我的模型,模型得到了新鲜的数据。
然而,当我弹出视图(widget)并在之后重新访问视图(widget)时,我有以下问题。Provider.of<>(context) 再次被调用,但由于模型已经被初始化,我从模型中得到了以前的数据(这很有用,因为我确实用它来保存某些屏幕之间的状态)。
我需要我的模型重新初始化,因为我需要刷新我的数据和重置页面值,而且由于构造函数从未被再次调用,我没有得到任何这些。
无论我怎么做,如果我调用初始化方法,从 initState() didChangeDependencies() 它总是出错,因为我在构建小组件时改变了数据。
我正在寻找类似下面的东西。
MyChangeNotifier variable = MyChangeNotifier();
ChangeNotifierProvider.value(
value: variable,
child: child()
)
重新初始化我的类,但从我读到的内容来看 这是很糟糕的,不知道该在哪里调用它。
我不知道如何继续,任何帮助都将是感激的。
所以我在Provider实际文档中找到了我要找的东西 此处.
关键是要在Future.microTask()里面调用你的代码来更新UI或触发重建。这只会在未来完成后触发重建,而不会在widget树还在构建时触发重建。
@override
initState() {
super.initState();
Future.microtask(() =>
context.read<MyNotifier>(context).getMyData(); // Or in my situation initialize the page.
);
}