带有导航器的AuthWidget

时间:2020-03-15 13:53:55

标签: flutter firebase-authentication flutter-navigation

我目前正在开发一个基本完成的应用程序,但是我很难完成FCM,Snackbar和Navigation的组合。我想要的是在收到通知时显示一个Snackbar,并使其在单击时将用户导航到特定页面。

我的身份验证基于this tutorial。为了获取全局Scaffoldkey,我目前在MaterialApp中实现了一个Builder以获取全局Scaffoldkey:

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

到目前为止,效果很好,但是当我通过向我的MaterialApp添加NavigatorState-Key的那一刻起

navigatorKey: MessagingService.navKey,

我的导航停止完全起作用。因此,我试图解决该问题,并尝试使用全局Scaffold来显示我的Snackbar并在FCM的onMessage回调中从中导航它:

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

根据我的理解,这会将Snackbar推送到我全局定义的Scaffold中,该Scaffold位于导航器上方。这就是我的问题所在。当我在该Snackbar中实现onClick-Listener时,Flutter将找不到我的导航器(因为该脚手架是该导航器的祖先)。

因此,如何在不丢失AuthWidget功能的情况下定义作为全局定义的Scaffold的后代的Navigator。

我需要实现的是实现一个Scaffold,它只能构建一次(GlobalKey需要唯一),但是位于我的Navigator下方,因此 Navigator.of(..)返回说导航器。

0 个答案:

没有答案