[踩坑]Flutter使用setState出错call setState() on a State object for a widget that no longer appears in th
Posted HackShendi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[踩坑]Flutter使用setState出错call setState() on a State object for a widget that no longer appears in th相关的知识,希望对你有一定的参考价值。
Hi,I’m Shendi
最近用Flutter开发APP出现了一个问题
在使用 setState 的时候报
call setState() on a State object for a widget that no longer appears in the widget tree
百度后找到的答案是在setState之前先判断 mounted
if (mounted)
setState();
加上后的确不报错了,但是功能上出问题了,我功能是WebSocket接收到数据后刷新当前列表,数据的确拿到了,但是现在列表也不刷新,错误也不报(mounted为false导致不执行setState)
更重要的是出现的情况是偶尔,这就让我摸不着头脑了
经过种种排查后,发现这种情况是切换页面的时候发生的,然后查阅关于 mounted 的资料,说这个参数在dispose后就为false了,于是又进行了大半天的排查,最后猜到了一种可能性,就是使用的对象不一致,最终问题解决
应该是每次页面切换过去在换回来,都会是一个新的对象,我的websocket只用开启一次,于是就造成了websocket使用的是第一个对象,后面的都没有,于是就造成了这种情况了
解决
在类里面定义一个全局变量,在init里面使用this初始化此变量,后面在使用的时候都用这个变量里的属性
例如
class Test extends State<>
// 唯一对象
var that;
// 属性
var a,b,c;
@override
void initState()
super.initState();
that = this;
load()
that.setState(
a = 1;
b = 2;
c = 3;
);
…
以上是关于[踩坑]Flutter使用setState出错call setState() on a State object for a widget that no longer appears in th的主要内容,如果未能解决你的问题,请参考以下文章
[踩坑]Flutter使用setState出错call setState() on a State object for a widget that no longer appears in th
React Native 踩坑日记(十二) —— 数组的复制