#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,
);
},
);
Вот ссылка на этот пакет, пожалуйста, взгляните .