pushRoute<T> method

Future<T?> pushRoute<T>(
  1. DipNavRoute route, {
  2. bool removeUntil = false,
  3. bool replaceCurrent = false,
  4. bool rebuild = true,
  5. bool fullscreenDialog = false,
  6. bool maintainState = true,
})

Implementation

Future<T?> pushRoute<T>(DipNavRoute route,
    {bool removeUntil = false,
    bool replaceCurrent = false,
    bool rebuild = true,
    bool fullscreenDialog = false,
    bool maintainState = true}) async {
  assert(!(removeUntil && replaceCurrent),
      'Only removeUntil or replaceCurrent should by true!');
  if (removeUntil) {
    _stackPages.clear();
  } else if (replaceCurrent && _stackPages.isNotEmpty) {
    _stackPages.removeLast();
  }
  _addRoute(route,
      fullscreenDialog: fullscreenDialog, maintainState: maintainState);
  if (rebuild) {
    notifyListeners();
    dipNavObservers?.forEach((element) {
      if (!replaceCurrent && !removeUntil) {
        if (kDebugMode) print('didPush');
        element.didPush(
            _stackPages.last.route,
            _stackPages.length >= 2
                ? _stackPages[_stackPages.length - 2].route
                : null);
      } else if (replaceCurrent) {
        if (kDebugMode) print('didReplace');
        element.didReplace(
            newRoute: _stackPages.last.route,
            oldRoute: _stackPages.length >= 2
                ? _stackPages[_stackPages.length - 2].route
                : null);
      } else {
        if (kDebugMode) print('didReplace');
        element.didRemove(
            _stackPages.last.route,
            _stackPages.length >= 2
                ? _stackPages[_stackPages.length - 2].route
                : null);
      }
    });
  }
  return Future.value();
}