call method
A Middleware
function that intercepts a dispatched action
Implementation
@override
void call(Store<T> store, dynamic action, NextDispatcher next) {
if (action is NavigateToAction) {
final navigationAction = action;
final currentState =
this.currentState ?? NavigatorHolder.navigatorKey.currentState;
if (action.preNavigation != null) {
action.preNavigation!();
}
switch (navigationAction.type) {
case NavigationType.shouldReplace:
currentState!.pushReplacementNamed(navigationAction.name!,
arguments: navigationAction.arguments);
this._setState(NavigationDestination(
navigationAction.name!, navigationAction.arguments));
break;
case NavigationType.shouldPop:
currentState!.pop();
this._setState(NavigatorHolder.state?.previousDestination);
break;
case NavigationType.shouldPopUntil:
currentState!.popUntil(navigationAction.predicate!);
this._setState(null);
break;
case NavigationType.shouldPushNamedAndRemoveUntil:
currentState!.pushNamedAndRemoveUntil(
navigationAction.name!, navigationAction.predicate!,
arguments: navigationAction.arguments);
this._setState(null);
break;
default:
currentState!.pushNamed(navigationAction.name!,
arguments: navigationAction.arguments);
this._setState(NavigationDestination(
navigationAction.name!, navigationAction.arguments));
}
if (action.postNavigation != null) {
action.postNavigation!();
}
}
next(action);
}