init static method
Important!!! Navigator operation requested with a context that does include a Navigator.
Implementation
static void init(BuildContext context) {
if (gContext == context) {
return;
}
gContext = context;
/// Important:
/// Make sure that the given context has a [MediaQuery] ancestor.
/// Make sure that the given context should under WidgetsApp/CupertinoApp/MaterialApp, those widgets introduce a MediaQuery
assert(context.dependOnInheritedWidgetOfExactType<MediaQuery>() != null, '');
assert(() {
__shower_log__('[init] current context size: ${MediaQuery.of(context).size}');
return true;
}());
Navigator? navigator;
if (context is Element && context.widget is Navigator) {
navigator = context.widget as Navigator;
assert(() {
__shower_log__('[init] current context already with a navigator >>> $navigator');
return true;
}());
}
// Try to get app instance back here ....
NavigatorState? naviState = context.findRootAncestorStateOfType<NavigatorState>();
BuildContext? naviContext = naviState?.context;
Widget? naviWidget = naviContext?.widget;
Navigator? anotherNavigator = naviWidget != null && naviWidget is Navigator ? naviWidget : null;
if (navigator != anotherNavigator) {
assert(() {
__shower_log__('[init] found another navigator from ancestor >>> $anotherNavigator');
return true;
}());
navigator = anotherNavigator;
}
RenderObject? naviRenderObject = naviContext?.findRenderObject();
assert(() {
__shower_log__('[init] naviState >>> $naviState, naviContext >>> $naviContext, naviWidget >>> $naviWidget, '
'navigator >>> $navigator, naviRenderObject >>> $naviRenderObject');
return true;
}());
if (navigator?.observers.contains(DialogShower.getObserver()) ?? false) {
assert(() {
__shower_log__('[init] already register observer in navigator!!!!');
return true;
}());
NavigatorObserverEx.ensureInit();
}
}