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

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

第一步:找到问题原因,定位问题发生的执行代码
Flutter 报错 setState() or markNeedsBuild() called during build_第1张图片
上面可以得到的错误信息:
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的源码
Flutter 报错 setState() or markNeedsBuild() called during build_第2张图片
再找到创建show实例的代码
Flutter 报错 setState() or markNeedsBuild() called during build_第3张图片
再找到Overlay.of源码
Flutter 报错 setState() or markNeedsBuild() called during build_第4张图片
这里清楚的描述了这个组件,是需要建立在父组件之上的。

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

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

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

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

你可能感兴趣的:(Flutter,flutter,android,ios)