updateRouteParam method
AFRouteState
updateRouteParam(
- AFRouteParam param,
- List<
AFRouteParam> ? children, - AFCreateDefaultChildParamDelegate? createDefaultChildParam
Replaces the data on the current leaf element without changing the segments in the route.
Implementation
AFRouteState updateRouteParam(AFRouteParam param, List<AFRouteParam>? children, AFCreateDefaultChildParamDelegate? createDefaultChildParam) {
// in this case, we obviously don't want to set this value as the param. Instead,
// we want to verify that it already exists, or else create it using the uiConfig's default
// method.
if(param is AFRouteParamRef) {
return updateRouteParamWithExistingOrDefault(param);
}
if(param.hasChildWID) {
return setChildParam(param);
}
var screen = param.screenId;
var route = param.routeLocation;
if(route == AFRouteLocation.screenHierarchy) {
if(hasStartupWrapper && screen == AFibF.g.screenMap.startupScreenId) {
screen = AFUIScreenID.screenStartupWrapper;
}
AFibD.logRouteAF?.d("updateHierarchyParam: $screen, $param");
final seg = screenHierarchy.findSegmentFor(screen, includePrior: true);
if(seg == null) {
throw AFException("No route segment for screen $screen");
}
final merged = param.mergeOnWrite(seg.param);
final revisedSeg = seg.copyWith(param: merged);
return _reviseScreen(screenHierarchy.updateRouteSegment(screen, revisedSeg));
} else {
var globalSeg = globalPool[screen];
if(globalSeg == null) {
globalSeg = AFRouteSegment.withParam(param, children, createDefaultChildParam);
} else {
final merged = param.mergeOnWrite(globalSeg.param);
if(param.wid == AFUIWidgetID.useScreenParam) {
final childSegs = children != null ? AFRouteSegmentChildren.fromList(children) : null;
globalSeg = globalSeg.copyWith(param: merged, children: childSegs);
} else {
globalSeg = globalSeg.reviseChild(merged);
}
}
return setGlobalPoolParam(screen, globalSeg);
}
}