理解字面意思:大概是说,在视图构建的时候,且视图并未构建完成的时候,调用了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
本人菜鸟一枚,不足之处,还望指点