我们在应用程序中使用Riverpod进行导航和状态管理,但最近如果我们想运行应用程序的应用程序Web版本,我们会在初始应用程序小部件中遇到崩溃。这个小部件在runApp()中被调用,并位于我们自定义的NavigatorWidget之上,它使用StateNotifier将页面映射到Navigator小部件并修改导航堆栈的状态。我们使用Flutter 3.3.5和除Web之外的所有其他平台完美运行。
class App extends StatelessWidget {
const App({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return ProviderScope(
overrides: <Override>[
mainNavigationProvider.overrideWithProvider(mainNavigationProviderImpl),
],
child: const MaterialWidget(),
);
}
}
class MaterialWidget extends HookConsumerWidget {
const MaterialWidget({Key? key}) : super(key: key);
@override
Widget build(BuildContext context, WidgetRef ref) {
const String appTitle = 'Flutter App';
return MaterialApp(
title: appTitle,
theme: lightTheme,
darkTheme: darkTheme,
scrollBehavior: scrollBehaviour,
supportedLocales: AppLocalizations.supportedLocales,
localizationsDelegates: AppLocalizations.localizationsDelegates,
localeResolutionCallback: (locale, supportedLocales) =>
AppLocalizations.checkLocale(locale, supportedLocales),
debugShowCheckedModeBanner: false,
navigatorKey: ref.watch(navigatorKeyProvider),
scaffoldMessengerKey: ref.watch(scaffoldMessengerKeyProvider),
home: const NavigatorWidget(),
);
}
}
这是一个例外:
由于@Randal Schwartz的评论,此问题已得到解决。dart2js中似乎有bug导致此异常。目前只有发布构建在Flutter Web中工作,直到此bug得到解决。
不幸的是,我没有更多关于这个bug的信息。如果你有更多的信息或Github链接,我认为这将是一个很好的地方。