navigationController top-level property
NavigationController
navigationController
Signature to provide NavigationController instance
Typically, NavigationController instance would be stored in the state of the application And a GlobalKey can be associated with the application widget, so the state can be accessed globally.
final GlobalKey<AppState> _appStateKey = GlobalKey<AppState>();
class App extends StatefulWidget {
static AppState get state => _appStateKey.currentState!;
App() : super(key: _appStateKey);
@override
State<App> createState() => AppState();
}
class AppState extends State<App> {
late NavigationController _navigationController;
late AppDestinationStackParser _locationParser;
@override
void initState() {
super.initState();
_locationParser = const AppDestinationStackParser();
_navigationController = NavigationController(
pageFactory: _locationParser.buildPageFactory(),
initialStack: _locationParser.buildRootStack(),
);
registerNavigationControllerProvider(
() => _appStateKey.currentState!._navigationController,
);
}
@override
Widget build(BuildContext context) => MaterialApp.router(
title: 'Flutter Router Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
routeInformationParser: _locationParser,
routerDelegate: _navigationController,
);
}
Implementation
NavigationController get navigationController => _provider();