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

  • Post author:
  • Post category:其他



理解字面意思:大概是说,在视图构建的时候,且视图并未构建完成的时候,调用了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


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



版权声明:本文为qq_39493848原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。