public void popUntil(RoutePredicate predicate) { while (!predicate(this._history.last())) { this.pop(); } }
public IPromise <object> pushAndRemoveUntil(Route newRoute, RoutePredicate predicate) { D.assert(!this._debugLocked); D.assert(() => { this._debugLocked = true; return(true); }); var removedRoutes = new List <Route>(); while (this._history.isNotEmpty() && !predicate(this._history.last())) { var removedRoute = this._history.last(); this._history.RemoveAt(this._history.Count - 1); D.assert(removedRoute != null && removedRoute._navigator == this); D.assert(removedRoute.overlayEntries.isNotEmpty()); removedRoutes.Add(removedRoute); } D.assert(newRoute._navigator == null); D.assert(newRoute.overlayEntries.isEmpty()); var oldRoute = this._history.isNotEmpty() ? this._history.last() : null; newRoute._navigator = this; newRoute.install(this._currentOverlayEntry); this._history.Add(newRoute); newRoute.didPush().whenCompleteOrCancel(() => { if (this.mounted) { foreach (var route in removedRoutes) { route.dispose(); } } }); newRoute.didChangeNext(null); if (oldRoute != null) { oldRoute.didChangeNext(newRoute); } foreach (var observer in this.widget.observers) { observer.didPush(newRoute, oldRoute); foreach (var removedRoute in removedRoutes) { observer.didRemove(removedRoute, oldRoute); } } D.assert(() => { this._debugLocked = false; return(true); }); this._afterNavigation(); return(newRoute.popped); }
public IPromise <object> pushNamedAndRemoveUntil(string newRouteName, RoutePredicate predicate) { return(this.pushAndRemoveUntil(this._routeNamed(newRouteName), predicate)); }
public static void popUntil(BuildContext context, RoutePredicate predicate) { Navigator.of(context).popUntil(predicate); }
public static IPromise <object> pushAndRemoveUntil(BuildContext context, Route newRoute, RoutePredicate predicate) { return(Navigator.of(context).pushAndRemoveUntil(newRoute, predicate)); }
public IPromise <object> pushNamedAndRemoveUntil(string newRouteName, RoutePredicate predicate, object arguments = null) { return(this.pushAndRemoveUntil(this._routeNamed(newRouteName, arguments: arguments), predicate)); }
public static IPromise <object> pushNamedAndRemoveUntil(BuildContext context, string newRouteName, RoutePredicate predicate, object arguments = null) { return(of(context).pushNamedAndRemoveUntil(newRouteName, predicate, arguments: arguments)); }