【问题标题】:Flutter Provider reinitialize modelFlutter Provider 重新初始化模型
【发布时间】:2020-08-31 02:22:07
【问题描述】:

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

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

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

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

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

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

MyChangeNotifier variable = MyChangeNotifier();

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

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

我不知道如何继续,如果有任何帮助,我们将不胜感激。

【问题讨论】:

    标签: flutter provider


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-06-12
      • 2021-03-09
      • 2022-12-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-26
      • 2021-03-17
      • 2021-05-24
      • 2021-10-28
      相关资源
      最近更新 更多