Flutter提供者重新初始化模型

问题描述 投票:0回答:1

我使用MultiProvider,然后创建我所有的模型。启用了懒惰加载,因此当我打开我的页面widget时,我的模型的构造函数在我调用 Provider.of<>(context).

这就初始化了我的模型,模型得到了新鲜的数据。

然而,当我弹出视图(widget)并在之后重新访问视图(widget)时,我有以下问题。Provider.of<>(context) 再次被调用,但由于模型已经被初始化,我从模型中得到了以前的数据(这很有用,因为我确实用它来保存某些屏幕之间的状态)。

我需要我的模型重新初始化,因为我需要刷新我的数据和重置页面值,而且由于构造函数从未被再次调用,我没有得到任何这些。

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

我正在寻找类似下面的东西。

MyChangeNotifier variable = MyChangeNotifier();

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

重新初始化我的类,但从我读到的内容来看 这是很糟糕的,不知道该在哪里调用它。

我不知道如何继续,任何帮助都将是感激的。

flutter provider
1个回答
0
投票

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

关键是要在Future.microTask()里面调用你的代码来更新UI或触发重建。这只会在未来完成后触发重建,而不会在widget树还在构建时触发重建。

@override
initState() {
  super.initState();
  Future.microtask(() =>
    context.read<MyNotifier>(context).getMyData(); // Or in my situation initialize the page.
  );
}
© www.soinside.com 2019 - 2024. All rights reserved.