flutter - 错误 - 未处理的异常 : This widget has been unmounted,,因此状态不再具有上下文

标签 flutter dart lifecycle page-lifecycle

我将从服务中获取的数据调用到 didChangeDependency 中以将其反射(reflect)在页面上。因为当我在 initState 中调用它时,我遇到了错误。无论如何,这不是我的主要问题。我的主要问题是当页面加载时,我得到了数据,但是当我想转到上一页时,我面临一个问题:
“未处理的异常:此小部件已被卸载,因此状态不再具有上下文(并且应被视为已失效)。” “考虑在‘dispose’期间取消任何事件的工作,或使用‘mounted’ getter来确定状态是否仍然事件。” 根据我的研究,我应该在 if 状态下使用“mounted”。但这没有用。 我也尝试过这样的 if 语句:

@override
  void setState(VoidCallback fn) {
    if (mounted) {
      super.setState(fn);
    }
  }

These are errors i got

我的代码:

List<DetailObjects?> onOdemeDetay = [];

  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    OnOdemeListeClass().fetchList(context).then((value) {
      final checkData = Provider.of<LoginInfo>(context, listen: false);
      if (mounted) {
        setState(() {
          if (value != null && value.detailObjects != null) {
            onOdemeDetay = value.detailObjects!;
            checkData.updateLabel(onOdemeDetay[0]?.label);
            checkData.updateValue(onOdemeDetay[0]?.value);
          }
        });
      }
    });
  }

最佳答案

如果您想在转到上一页之前更新状态,则必须添加 2 秒的延迟,这意味着当用户按后退按钮时,首先会更新状态,然后用户将导航到上一页。

 onPressed: () {

  //First Update your state here

  Future.delayed(Duration(seconds: 2)).then((value) {
     //Code to navigate previous page
  });
},

关于flutter - 错误 - 未处理的异常 : This widget has been unmounted,,因此状态不再具有上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75588667/

相关文章:

dart - 如何使用英雄在 2 个不同的按钮之间有相同的页面目标

Flutter - TextField 在焦点上重建小部件

flutter - 调用容器中的二维码扫描仪/条形码扫描仪或 Flutter 中的任何小部件

Flutter:从 Google 表格中读取数据

PHP变量生命周期/作用域

flutter - 在 Flutter 中结合 SingleChildScrollView 和 PageView

flutter "Do not use BuildContexts across async gaps"

database - 如何解决 flutter sqlite 语法错误?

docker - docker 容器是否保留文件更改?

Android:生命周期问题——离开应用