flutter - 对小部件的 State 对象调用 setState()

标签 flutter dart

flutter 下面的代码处理底部栏的管理,当代码执行时,点击 Icons.add 按钮,然后更改底部元素,系统显示以下错误:

错误:

[VERBOSE-2:ui_dart_state.cc(157)] Unhandled Exception: setState() called after dispose(): _HomeViewScreenState#d0762(lifecycle state: defunct, tickers: tracking 1 ticker)

如果您对不再出现在小部件树中的小部件的 State 对象调用 setState() ,则会发生此错误(例如,其父小部件不再在其构建中包含该小部件)。当代码从计时器或动画回调调用 setState() 时,可能会发生此错误。

首选的解决方案是在 dispose() 回调中取消计时器或停止监听动画。另一种解决方案是在调用 setState() 之前检查该对象的“mounted”属性,以确保该对象仍在树中。

如果调用 setState(),此错误可能表示内存泄漏,因为另一个对象在从树中删除后仍保留对此 State 对象的引用。为了避免内存泄漏,请考虑在 dispose() 期间中断对此对象的引用。

Flutter Code

Flutter Code HomeState

最佳答案

您需要检查小部件是否已安装。不要直接调用 setState,而是使用:

if (mounted)
    setState(() {});

说明: 当您离开屏幕时,小部件将被释放。所以你不能对其调用setState()

关于flutter - 对小部件的 State 对象调用 setState(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62550698/

相关文章:

android-studio - 自 Flutter/Android Studio 更新以来 Flutter 应用程序崩溃

flutter - 在小部件中获取时间选择器的值

flutter - 在ShowDialog的TextField上显示错误文本

Flutter ListWheelScrollView ,如何添加水平线

flutter - 如何从Flutter中的Future <String>中获取字符串?

dart - 滑动返回手势 flutter

replace - 在 Dart 中查找和替换字符串

mongodb - Flutter:我可以将Firebase Auth与Mongodb数据库混合吗?

flutter - 错误 '_InternalLinkedHashMap<String, dynamic>' 不是类型 'Iterable<dynamic>' 的子类型

flutter - 使用 Riverpod Flutter 创建登录功能