page_settings.dart
1.98 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
97
98
99
100
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)?.location ?? '/';
  }
  RouterDelegate get delegate {
    return router.routerDelegate;
  }
  GetDelegate get navigation {
    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;
}