Flutter 错误:Unhandled Exception: setState() or markNeedsBuild() called during build.
这个错误通常发生在您试图在 widget 构建期间调用 setState() 或 markNeedsBuild() 时。这会导致无限循环,因为每次更新状态都会触发新的构建,从而再次调用 setState() 或 markNeedsBuild()。
以下是一些解决方法:
-
避免在构建期间更新状态: 您可以使用
Future.delayed()或WidgetsBinding.instance.addPostFrameCallback()将状态更新延迟到构建完成之后。 -
使用 Obx 和 RxBuilder: 如果您使用了 Obx widget,请确保您只在可观察对象 (Observable) 发生变化时调用
setState()或markNeedsBuild()。您可以使用RxBuilderwidget 来包装您的 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 应用能够正常运行。
原文地址: https://www.cveoy.top/t/topic/lBi8 著作权归作者所有。请勿转载和采集!