[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();
    });
  }
}
相关推荐
leobertlan2 小时前
2025年终总结
前端·后端·程序员
子兮曰2 小时前
OpenClaw架构揭秘:178k stars的个人AI助手如何用Gateway模式统一控制12+通讯频道
前端·javascript·github
百锦再3 小时前
Reactive编程入门:Project Reactor 深度指南
前端·javascript·python·react.js·django·前端框架·reactjs
莲华君3 小时前
React快速上手:从零到项目实战
前端·reactjs教程
百锦再3 小时前
React编程高级主题:测试代码
android·前端·javascript·react.js·前端框架·reactjs
易安说AI3 小时前
Ralph Loop 让Claude无止尽干活的牛马...
前端·后端
失忆爆表症5 小时前
05_UI 组件库集成指南:Shadcn/ui + Tailwind CSS v4
前端·css·ui
小迷糊的学习记录5 小时前
Vuex 与 pinia
前端·javascript·vue.js
发现一只大呆瓜5 小时前
前端性能优化:图片懒加载的三种手写方案
前端·javascript·面试
不爱吃糖的程序媛5 小时前
Flutter 与 OpenHarmony 通信:Flutter Channel 使用指南
前端·javascript·flutter