buildRoute method
- VPathRequestData vPathRequestData, {
- required VPathMatch parentVPathMatch,
- required bool parentCanPop,
buildRoute must return VRoute if it constitute (which its subroutes or not) a valid
route given the input parameters
VRoute should describe this valid route
vPathRequestData contains all the information about the original request coming
from VRouter
It should not be changed and should be given as-is to its subroutes
parentRemainingPath is the part on which to base any local path
WARNING: parentRemainingPath is null if the parent did not match the path
in which case only absolute path should be tested.
parentPathParameters are the path parameters of every VRouteElement above this
one in the route
buildRoute basically just checks for a match in stackedRoutes and if any
adds this VRouteElement to the VRoute
For more info on buildRoute, see VRouteElement.buildRoute
Implementation
VRoute? buildRoute(
VPathRequestData vPathRequestData, {
required VPathMatch parentVPathMatch,
required bool parentCanPop,
}) {
VRoute? childVRoute;
for (var vRouteElement in _subroutes) {
childVRoute = vRouteElement.buildRoute(
vPathRequestData,
parentVPathMatch: parentVPathMatch,
parentCanPop: parentCanPop,
);
if (childVRoute != null) {
return VRoute(
vRouteElementNode: VRouteElementNode(
this,
localPath: null,
stackedVRouteElementNode: childVRoute.vRouteElementNode,
),
pages: childVRoute.pages,
pathParameters: childVRoute.pathParameters,
vRouteElements: <VRouteElement>[this] + childVRoute.vRouteElements,
names: parentVPathMatch.names,
);
}
}
// If none where found, test if this [VRouteElement] can create a [VRoute]
final validParentVPathMatch = (parentVPathMatch is ValidVPathMatch) &&
parentVPathMatch.remainingPath.isEmpty;
if (!mustHaveSubRoutes && validParentVPathMatch) {
return VRoute(
vRouteElementNode: VRouteElementNode(
this,
localPath: null,
),
pages: [],
pathParameters: (parentVPathMatch as ValidVPathMatch).pathParameters,
vRouteElements: <VRouteElement>[this],
names: parentVPathMatch.names,
);
}
return null;
}