parseInternalUri method
Implementation
SplitRoutePath parseInternalUri(Uri uri) {
print("[SplitRouteInformationParser] parseInternalUri: ${uri.path}");
List<PageInstance> instances = <PageInstance>[];
if (uri.pathSegments.length == 0) {
instances.add(pageCollectionMap.pageHome.withoutParam());
} else {
var segmentsLeft = <String>[]..addAll(uri.pathSegments);
while (segmentsLeft.length != 0) {
var key = segmentsLeft[0];
var isAnonymousPage = key.length == 5 &&
(int.tryParse(key)?.toString() ?? "x").padLeft(5, "0") == key;
if (isAnonymousPage) {
var currentVersion = SplitRouterDelegate
.instance.routePath.pageInstances
.where((p) => p is AnonymousPage)
.cast<AnonymousPage?>()
.firstWhere((p) => p!.keyNumber == key, orElse: () => null);
if (currentVersion != null) {
instances.add(currentVersion);
}
segmentsLeft = segmentsLeft.sublist(1);
} else {
if (pageCollectionMap.containsKey(segmentsLeft[0])) {
var keyPage = pageCollectionMap[key];
segmentsLeft = segmentsLeft.sublist(1);
if (segmentsLeft.length >= keyPage.parameterCount) {
var params = segmentsLeft.sublist(0, keyPage.parameterCount);
var currentVersion = SplitRouterDelegate
.instance.routePath.pageInstances
.where((p) => p is KeyPageInstance)
.cast<KeyPageInstance?>()
.firstWhere(
(p) =>
p!.keyPage.key == key &&
p.param.join("/") == params.join("/"),
orElse: () => null);
if (currentVersion != null) {
instances.add(currentVersion);
} else {
instances.add(keyPage.withParam(params));
}
segmentsLeft = segmentsLeft.sublist(keyPage.parameterCount);
} else {
return SplitRoutePath([pageCollectionMap.page404.withoutParam()]);
}
} else {
return SplitRoutePath([pageCollectionMap.page404.withoutParam()]);
}
}
}
}
return SplitRoutePath(instances);
}