Flutter升级后出现Zone mismatch错误,如何解决?
解决Flutter升级后的Zone mismatch错误
这个错误的核心原因是Flutter绑定初始化的Zone与后续调用runApp的Zone不一致。你的代码里WidgetsFlutterBinding.ensureInitialized()和Firebase.initializeApp()在默认Zone执行,而runApp却被放在runZonedGuarded创建的新Zone中,这就触发了框架的Zone匹配检查。
修复方法很简单:将所有初始化逻辑移到runZonedGuarded的回调内部,确保整个应用的启动流程都在同一个Zone中执行:
Future<void> mainCommon(AppSettings appSettings) async { runZonedGuarded(() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); runApp( ProviderScope( overrides: [ flavorConfigProvider.overrideWithValue(appSettings), ], child: DevicePreview( enabled: appSettings.isDev, builder: (context) => const MyApp(), ), ), ); }, (error, stackTrace) { FirebaseCrashlytics.instance.recordError(error, stackTrace); }); }
这样调整后,WidgetsFlutterBinding.ensureInitialized()、Firebase初始化以及runApp都在runZonedGuarded创建的Zone中执行,完全符合Flutter框架对Zone一致性的要求,错误会被消除。同时,所有异步操作的错误也能被runZonedGuarded统一捕获并上报到Crashlytics。
内容的提问来源于stack exchange,提问作者Diego Castaño
相关产品推荐
相关产品推荐

