提问者:小点点

使用Riverpod消费者小部件作为顶级小部件会使Flutter Web中的应用程序崩溃


我们在应用程序中使用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(),
    );
  }
}

这是一个例外:


共1个答案

匿名用户

由于@Randal Schwartz的评论,此问题已得到解决。dart2js中似乎有bug导致此异常。目前只有发布构建在Flutter Web中工作,直到此bug得到解决。

不幸的是,我没有更多关于这个bug的信息。如果你有更多的信息或Github链接,我认为这将是一个很好的地方。