Flutter 报错 setState() or markNeedsBuild() called during build

理解字面意思:大概是说,在视图构建的时候,且视图并未构建完成的时候,调用了setState()或markNeedsBuild()方法函数。

第一步:找到问题原因,定位问题发生的执行代码
在这里插入图片描述
上面可以得到的错误信息:
1)Unhandled Exception: setState() or markNeedsBuild() called during build.
大致意思:在构建期间调用setState()或markNeedsBuild()。
2)the framework builds parent widgets before children, which means a dirty descendant will always be built. Otherwise, the framework might not visit this widget during this build phase。
大致意思:你构建的小组件比父组件先构建,也就是在构建小组件的时候,父组件还未被构建或在构建当中,而组件必须是基于父组件之上。
3)EasyLoading._show
大致意思:这就是我们构建的小组件,错误构建的地方。
进到EasyLoading.show的源码
在这里插入图片描述
再找到创建show实例的代码
在这里插入图片描述
再找到Overlay.of源码
在这里插入图片描述
这里清楚的描述了这个组件,是需要建立在父组件之上的。

第二步:解决方案
如果你想在initState的时候调用这个组件,那么就需要等父组件创建完成后再去创建小组件,
官方提供了一个组件创建完成的回调通知方法

   WidgetsBinding.instance.addPostFrameCallback((_) {
       //需要创建的小组件
 });

在父组件创建完成之后,再创建小组件。

-------------------------------------------------------------------------------end
本人菜鸟一枚,不足之处,还望指点

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值