如何在创建"main" MaterialApp的导航器后访问它?



我有以下代码:

import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';
class MyApp extends StatelessWidget {
final GlobalKey<NavigatorState> _navigatorKey = new GlobalKey<NavigatorState>();
_mustBeCalledWhenNavigatorIsReady() {
FirebaseAuth.instance
.authStateChanges()
.listen((User user) {
if (user == null) {
// the problem is that this happens before navigator is created and _navigatorKey.currentState == null
// I need to call _mustBeCalledWhenNavigatorIsReady when the navigator instance is already created
_navigatorKey.currentState.pushReplacementNamed('auth/login');
} else {
_navigatorKey.currentState.pushReplacementNamed('/');
}
});
}
MyApp() {
_mustBeCalledWhenNavigatorIsReady();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'MyApp',
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
// navigatorObservers: [],
navigatorKey: _navigatorKey,
onGenerateRoute: router.getRouteGenerator(), // uses router from package fluro internally - so its just a route generator
initialRoute: 'auth/login',
);
}
}

我需要在代码注释中描述的是在路由器创建后初始化一些侦听器,并且只做一次。然而,我只能在路由小部件中访问路由器。有什么简单的方法可以知道什么时候"主要"吗?创建了MaterialApp的导航器?

MaterialApp(
//....
initialRoute: initialRoutes(),
//....
)
string initialRoutes() {
final GlobalKey<NavigatorState> _navigatorKey = GlobalKey<NavigatorState>();
FirebaseAuth.instance
.authStateChanges()
.listen((User user) {
if (user == null) {
// the problem is that this happens before navigator is created and 
// _navigatorKey.currentState == null
// I need to call _mustBeCalledWhenNavigatorIsReady when the navigator 
// instance 
// is already created
return 'auth/login';
} else {
return '/';
}
});
}
}

最新更新