Навигационный ключ не найден на MaterialApp.router

#flutter

Вопрос:

Ранее при использовании MaterialApp был способ установить a GlobalContext с помощью a NavigatorKey , расположенного на MaterialApp widget .

Однако теперь похоже, что эта альтернатива больше невозможна, у меня есть эта структура, следующая 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));
  }
 

Теперь нет никакого навигационного ключа. Итак, мой вопрос в том, как я могу установить глобальный контекст с помощью MaterialApp.router ?

Ответ №1:

если вам просто нужен глобальный контекст, вы можете использовать его scaffoldMessengerKey вместо того, чтобы показывать снэк-бар.

 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!;
 

Ответ №2:

Это альтернативное решение этой проблемы :

Добавьте это:

         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,
        );
      },
    );
 

Вот ссылка на этот пакет, пожалуйста, взгляните .