generator method
Generates the RouteFactory which builds a Route on request.
These routes are built using the seafarerRoute
s provided using
addRoute method.
Implementation
RouteFactory generator() {
return (settings) {
final route = _routeNameMappings[settings.name!];
if (route == null) return null;
ArgumentsWrapper? argsWrapper = settings.arguments as ArgumentsWrapper?;
// If for some reason the arguments passed themself are null.
if (argsWrapper == null) {
argsWrapper = ArgumentsWrapper();
}
final BaseArguments? baseArgs = argsWrapper.baseArguments;
// Select which transitions to use.
// Priority:
// 1. Transitions provided when route is called.
// 2. Default transitions when route was registered.
// 3. Default transition from seafarerOptions.
final List<SeafarerTransition> transitions = [];
final bool areTransitionsProvidedInNavigate =
argsWrapper.transitions != null &&
argsWrapper.transitions!.isNotEmpty;
final bool areTransitionsProvidedInRouteDeclaration =
route.defaultTransitions != null &&
route.defaultTransitions!.isNotEmpty;
final bool areTransitionsProvidedInseafarerOptions =
this.options.defaultTransitions != null;
if (areTransitionsProvidedInNavigate) {
transitions.addAll(argsWrapper.transitions!);
} else if (areTransitionsProvidedInRouteDeclaration) {
transitions.addAll(route.defaultTransitions!);
} else if (areTransitionsProvidedInseafarerOptions) {
transitions.addAll(this.options.defaultTransitions!);
}
final transitionDuration = argsWrapper.transitionDuration ??
route.defaultTransitionDuration ??
this.options.defaultTransitionDuration;
final transitionCurve = argsWrapper.transitionCurve ??
route.defaultTransitionCurve ??
this.options.defaultTransitionCurve;
final customTransition = argsWrapper.customTransition ??
route.customTransition ??
this.options.customTransition;
bool shouldUseCustomTransition = customTransition != null;
if (argsWrapper.customTransition != null) {
shouldUseCustomTransition = true;
} else if (areTransitionsProvidedInNavigate) {
shouldUseCustomTransition = false;
} else if (route.customTransition != null) {
shouldUseCustomTransition = true;
} else if (areTransitionsProvidedInRouteDeclaration) {
shouldUseCustomTransition = false;
} else if (this.options.customTransition != null) {
shouldUseCustomTransition = true;
} else if (areTransitionsProvidedInseafarerOptions) {
shouldUseCustomTransition = false;
}
RouteSettings routeSettings = RouteSettings(
name: settings.name,
arguments: argsWrapper.copyWith(
baseArguments: baseArgs != null ? baseArgs : route.defaultArgs,
),
);
return TransitionFactory.buildTransition(
transitions: transitions,
duration: transitionDuration,
curve: transitionCurve,
settings: routeSettings,
customTransition: shouldUseCustomTransition ? customTransition : null,
builder: (context) => route.builder(
context,
baseArgs ?? route.defaultArgs,
ParamMap(
route.name,
argsWrapper!.routeParams,
argsWrapper.params,
),
),
);
};
}