我有这个初始化状态方法:

@override
  void initState() {
    super.initState();

    getNumber(index).then((number) {
      if (number> 1000) {
        number = number/ 1000;
        setState(() {
          flag = true;
          _num = number.toInt().toString();
        });
      } else {
        setState(() {
          _num = number.toInt().toString();
        });
      }
    });
  }

我犯了一个错误:

对象的State对象上调用setState()时会发生此错误 不再出现在微件树中的微件(例如,其父项 Widget在其构建中不再包含该Widget).此错误可能 当代码从计时器或动画调用setState()时发生 回拨.首选解决方案是取消计时器或停止 侦听Dispose()回调中的动画.另一种解决方案 是在调用之前判断此对象的"mount"属性 setState()以确保对象仍在树中.

如果正在调用setState(),则此错误可能表示内存泄漏 因为另一个对象保留了对此State对象的引用 在它从树上移走之后.为了避免内存泄漏, 考虑在Dispose()过程中断开对此对象的引用.

如何以正确的方式使用dispose?

推荐答案

我不能说明这是一个标准,但在我的代码中,我通常在每个Future事件中判断mounted;无论是.then.catchError还是.whenComplete回调.

@override
void initState() {
  super.initState();

  getNumber(index).then((number) {
    if (!mounted) {
      return; // Just do nothing if the widget is disposed.
    }
    // ...
  });
}

Flutter相关问答推荐

如何在SingleChildScrollView中使用GridView

如何更改ElevatedButton的 colored颜色 以按下它?

相同的Flutter 代码库,但Firebase登录适用于Web应用程序,但无法登录iOS应用程序

Flutter 蜂窝-检索非基元数据类型列表

我怎样才能在Ffltter中显示html布局链接?

try 使用fl_Chart of Ffltter,但在导入它时遇到以下错误:Error:';TextScaler';is;t a type

通过Ffltter应用程序与Docker服务器进行交互以进行身份验证

BaseInputfield和Textfield有什么不同?

如何在Flutter中制作弯曲文本

未处理的异常:第1行第5列出现错误:无效的媒体类型:应为/&;.从API获取数据时在Flutter中

Riverpod 2.0-如何使用FutureOr和AutoDisposeSyncNotificationer处理api状态代码?

没有为类型 'Widget' 定义运算符 '[]' .try 定义运算符[]

断言失败:std::move(hal_2_1_verifier).Run(). 初始化,LE音频客户端至少需要Bluetooth音频HAL V2.1

我怎样才能消除我的 Column 子元素之间的差距?

Flutter:为什么我的 listTile colored颜色 被容器 colored颜色 覆盖了?

有什么办法可以消除Flutter 中的传递依赖?

Flutter - 定义按钮的优雅方式

如何在 flutter 的alert 对话框中实现进度指示器?

从物理设备 Flutter 中移除 USB 后启动画面不可见?

如何在 Flutter 中的页面加载上的 Listview 上应用自动滚动