-
Notifications
You must be signed in to change notification settings - Fork 14
/
route_information_parser.dart
50 lines (43 loc) · 1.65 KB
/
route_information_parser.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import 'package:flutter/material.dart';
import 'package:flutter_web_navigation/core.dart';
/// parseRouteInformation will convert the given route information into parsed data to pass to RouterDelegate.
class RoutesInformationParser extends RouteInformationParser<RoutePath> {
@override
Future<RoutePath> parseRouteInformation(
RouteInformation routeInformation) async {
// converting the url into custom class T (RoutePath)
final uri = Uri.parse(routeInformation.location!);
if (uri.pathSegments.isEmpty) {
return RoutePath.home('/');
}
/// For query params- pass the complete path
if (uri.queryParameters.isNotEmpty) {
return RoutePath.otherPage(
routeInformation.location!.replaceFirst("/", ""));
}
if (uri.pathSegments.length == 1) {
final pathName = uri.pathSegments.elementAt(0).toString();
return RoutePath.otherPage(pathName);
} else if (uri.pathSegments.length == 2) {
final complexPath = uri.pathSegments.elementAt(0).toString() +
"/" +
uri.pathSegments.elementAt(1).toString();
return RoutePath.otherPage(complexPath.toString());
} else {
return RoutePath.otherPage(uri.pathSegments.toString());
}
}
@override
RouteInformation restoreRouteInformation(RoutePath configuration) {
if (configuration.isUnknown) {
return const RouteInformation(location: '/error');
}
if (configuration.isHomePage) {
return const RouteInformation(location: '/');
}
if (configuration.isOtherPage) {
return RouteInformation(location: '/${configuration.pathName}');
}
return const RouteInformation(location: null);
}
}