page_settings.dart
1.92 KB
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import 'package:flutter/widgets.dart';
import '../../../route_manager.dart';
extension PageArgExt on BuildContext {
RouteSettings? get settings {
return ModalRoute.of(this)!.settings;
}
PageSettings? get pageSettings {
final args = ModalRoute.of(this)?.settings.arguments;
if (args is PageSettings) {
return args;
}
return null;
}
dynamic get arguments {
final args = settings?.arguments;
if (args is PageSettings) {
return args.arguments;
} else {
return args;
}
}
Map<String, String> get params {
final args = settings?.arguments;
if (args is PageSettings) {
return args.params;
} else {
return {};
}
}
Router get router {
return Router.of(this);
}
String get location {
final parser = router.routeInformationParser;
final config = delegate.currentConfiguration;
return parser?.restoreRouteInformation(config)?.uri.toString() ?? '/';
}
GetDelegate get delegate {
return router.routerDelegate as GetDelegate;
}
}
class PageSettings extends RouteSettings {
PageSettings(
this.uri, [
Object? arguments,
]) : super(arguments: arguments);
@override
String get name => '$uri';
final Uri uri;
final params = <String, String>{};
String get path => uri.path;
List<String> get paths => uri.pathSegments;
Map<String, String> get query => uri.queryParameters;
Map<String, List<String>> get queries => uri.queryParametersAll;
@override
String toString() => name;
PageSettings copy({
Uri? uri,
Object? arguments,
}) {
return PageSettings(
uri ?? this.uri,
arguments ?? this.arguments,
);
}
@override
bool operator ==(Object other) {
if (identical(this, other)) return true;
return other is PageSettings &&
other.uri == uri &&
other.arguments == arguments;
}
@override
int get hashCode => uri.hashCode ^ arguments.hashCode;
}