init static method

void init(
  1. BuildContext context
)

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();
  }
}