[Flutter]有的时候调用setState(() {})报错?

先看FlutterSDK的原生类State中有一个变量mounted。

Dart 复制代码
abstract class State<T extends StatefulWidget> with Diagnosticable {
  /// mounted的作用是,此State对象当前是否在树中。
  /// 在创建State对象之后,在调用initState之前,框架通过将State对象与BuildContext的关联来 "mounts" 这个State对象。State对象保持挂载状态,直到框架调用dispose,在此之后,框架将永远不会要求State对象再次构建。
  /// 除非mounted为true,否则调用setState是错误的。
  bool get mounted => _element != null;
}

因此,在State<T extends StatefulWidget>的子类对象中,我们可以在封装了一个刷新界面的方法。特别是在网络数据请求等异步任务的回调中调用这个方法。

Dart 复制代码
class _HomePageState extends State<HomePage>
  void _updateUI() {
    if (mounted) {
      setState(() {});
    }
  }

  void _requestData() {
    RequestUtil.get(
      urlStr: 'urlStr',
      param: null,
      showLoading: false,
    ).then((value) {
      // 注: 回调可能在State对象被dispose之后才执行。
      if (value && value.data is List) {
        _dataList = value.data;
      } else {
        _dataList = [];
      }
      _updateUI();
    });
  }
}
相关推荐
广州华水科技5 分钟前
大坝变形监测的单北斗GNSS技术应用与发展分析
前端
Dontla9 分钟前
浏览器localStorage共享机制介绍(持久化客户端存储方案)本地存储冲突、iframe、XSS漏洞、命名空间隔离
前端·网络·xss
霍理迪24 分钟前
JS其他常用内置对象
开发语言·前端·javascript
tao35566726 分钟前
HTML-03-HTML 语义化标签
前端·html
小马_xiaoen29 分钟前
IndexedDB 从入门到实战:前端本地大容量存储解决方案。
前端
一起养小猫30 分钟前
Flutter for OpenHarmony 进阶:表达式解析算法与计算器核心实现
算法·flutter·harmonyos
jiayong2333 分钟前
Vue2 与 Vue3 常见面试题精选 - 综合宝典
前端·vue.js·面试
We་ct41 分钟前
LeetCode 383. 赎金信:解题思路+代码解析+优化实战
前端·算法·leetcode·typescript
东东5161 小时前
OA自动化居家办公管理系统 ssm+vue
java·前端·vue.js·后端·毕业设计·毕设
周某人姓周1 小时前
DOM型XSS案例
前端·安全·web安全·网络安全·xss