AuthWidget с навигатором - PullRequest
       76

AuthWidget с навигатором

0 голосов
/ 15 марта 2020

Я сейчас работаю над приложением, которое в основном закончено, но я изо всех сил пытаюсь получить комбинацию FCM, Snackbar и Navigation. Я хочу показать Snackbar при получении уведомления и сделать так, чтобы при переходе по нему пользователь переходил на определенную c страницу.

Моя аутентификация основана на этого урока . Чтобы получить глобальный ключ Scaffold, я в настоящее время реализовал Builder в моем MaterialApp, чтобы получить глобальный Scaffoldkey:

onGenerateRoute: _getRoute,
navigatorObservers: [
   FirebaseAnalyticsObserver(analytics: analytics),
],
builder: (BuildContext context, Widget child) {
  return Scaffold(key: MessagingService.scaffoldKey, body: child);
},
home: AuthWidget(userSnapshot: userSnapshot));

Пока это хорошо работает, но в тот момент, когда я добавляю NavigatorState-Key к своему MaterialApp от

navigatorKey: MessagingService.navKey,

Моя навигация перестает работать полностью. Следовательно, я попытался обойти эту проблему и попытался использовать глобальный Scaffold, чтобы показать мою Snackbar и перейти оттуда к моему обратному вызову onMessage из FCM:

_firebaseMessaging.configure(
  onMessage: (Map<String, dynamic> message) async {
    scaffoldKey.currentState.showSnackBar(new SnackBar(...)); //The Snackbar shows
  },
  ...

Согласно моему пониманию, это будет sh снэк-бар на моем глобально определенном эшафоте, который находится над навигатором. И вот где моя проблема. Когда я реализую onClick-Listener внутри этой Snackbar, Flutter не найдет мой Навигатор (так как Скаффолд является предком Навигатора).

Итак, как я могу определить Навигатор, который является потомком моего глобально определенного Scaffold без потери возможностей моего AuthWidget.

Мне нужно реализовать Scaffold, который собирается только один раз (GlobalKey должен быть уникальным), но находится ниже моего Navigator, поэтому Navigator .of (..) возвращает указанный Навигатор.

...