flutter 在MaterialApp.工艺路线上未找到NavigatorKey

wb1gzix0  于 2023-02-13  发布在  Flutter
关注(0)|答案(4)|浏览(201)

以前使用MaterialApp时,可以使用位于MaterialApp widget上的NavigatorKey设置GlobalContext
但是现在看起来这个替代方案不再可行了,我有这个结构,遵循Navigator 2.0

Widget build(BuildContext context, WidgetRef ref) {
    return MaterialApp.router(
        debugShowCheckedModeBanner: false,
        restorationScopeId: 'app',
        localizationsDelegates: const [
          AppLocalizations.delegate,
          GlobalMaterialLocalizations.delegate,
          GlobalWidgetsLocalizations.delegate,
          GlobalCupertinoLocalizations.delegate,
        ],
        supportedLocales: AppLocalizations.supportedLocales,
        onGenerateTitle: (BuildContext context) =>
            AppLocalizations.of(context)!.appTitle,
        routeInformationParser: const RoutemasterParser(),
        routeInformationProvider: routeInformationProvider,
        routerDelegate: introductionRouteMap(context, ref));
  }

现在没有任何NavigatorKey,所以我的问题是,如何使用MaterialApp.router设置GlobalContext?

qnyhuwrf

qnyhuwrf1#

您可以在RouterDelegate中添加NavigatorKey(未测试),对于需要GoRouter的用户,可以在GoRouter构造函数中添加NavigatorKey。

zdwk9cvp

zdwk9cvp2#

这是该问题的替代解决方案:
添加以下内容:

dependencies:
      one_context: ^1.1.1
then :
OneNotification<List<Locale>>(
      onVisited: (context, localeList) {
        print('widget visited!');
      },
      stopBubbling: true, // avoid the data bubbling to ancestors widgets
      initialData: _localeEnglish, // [data] is null during boot of the application, but you can set initialData
      rebuildOnNull: true, // Allow other entities reload this widget without messing up currenty data (Data is cached on first event)
      builder: (context, localeList) {
        return MaterialApp(
          supportedLocales: localeList,
        );
      },
    );

这里是这个包的Link请看。

q35jwt9p

q35jwt9p3#

如果您只需要一个GlobalContext,则可以使用scaffoldMessengerKey,它用于显示小吃店。
注意:此BuildContext不适用于导航

final scaffoldMessengerKey = GlobalKey<ScaffoldMessengerState>();

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp.router(
      scaffoldMessengerKey: scaffoldMessengerKey,
    );
  }
}

访问全局上下文的步骤

final context = scaffoldMessengerKey.currentContext!;
q7solyqu

q7solyqu4#

导航器2.0使Flutter的路由系统更具动态性,但以前在材料应用程序或库比蒂诺应用程序中传递的一些信息已被删除,必须使用模块化自己的支持方法对其进行配置。
在您的情况下,只需添加:

Modular.setNavigatorKey(myNavigatorKey);

x1月1x日之前

相关问题