这个错误通常发生在您试图在 widget 构建期间调用 setState()markNeedsBuild() 时。这会导致无限循环,因为每次更新状态都会触发新的构建,从而再次调用 setState()markNeedsBuild()

以下是一些解决方法:

  • 避免在构建期间更新状态: 您可以使用 Future.delayed()WidgetsBinding.instance.addPostFrameCallback() 将状态更新延迟到构建完成之后。

  • 使用 Obx 和 RxBuilder: 如果您使用了 Obx widget,请确保您只在可观察对象 (Observable) 发生变化时调用 setState()markNeedsBuild()。您可以使用 RxBuilder widget 来包装您的 UI 代码,以便只有当 Observable 发生变化时才会重新构建 widget。

例如,您可以在 RxBuilder 内部调用 setState()markNeedsBuild(),以便只有当您所依赖的 Observable 发生变化时才会重建 UI。

class MyWidget extends StatelessWidget {
  final Observable<int> count = Observable(0);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('My Widget')),
      body: Center(
        child: RxBuilder(
          builder: (context) => Text('Count: ${count.value}'),
        ),
      ),
    );
  }
}

通过遵循这些建议,您应该能够解决 Unhandled Exception: setState() or markNeedsBuild() called during build. 错误,并确保您的 Flutter 应用能够正常运行。

Flutter 错误:Unhandled Exception: setState() or markNeedsBuild() called during build.

原文地址: https://www.cveoy.top/t/topic/lBi8 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录