先看FlutterSDK的原生类State中有一个变量mounted。文章来源:https://www.toymoban.com/news/detail-656763.html
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>的子类对象中,我们可以在封装了一个刷新界面的方法。特别是在网络数据请求等异步任务的回调中调用这个方法。文章来源地址https://www.toymoban.com/news/detail-656763.html
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();
});
}
}
到了这里,关于[Flutter]有的时候调用setState(() {})报错?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!