Browse Source

添加路由通用逻辑;

maqiang 1 year ago
parent
commit
649826bbef

+ 1 - 0
ios/Flutter/Debug.xcconfig

@@ -1 +1,2 @@
1
+#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
1 2
 #include "Generated.xcconfig"

+ 1 - 0
ios/Flutter/Release.xcconfig

@@ -1 +1,2 @@
1
+#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
1 2
 #include "Generated.xcconfig"

+ 7 - 4
lib/main.dart

@@ -3,7 +3,6 @@ import 'package:flutter/services.dart';
3 3
 import 'package:flutter_localizations/flutter_localizations.dart';
4 4
 import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
5 5
 import 'package:lszlgl/router/my_navigator.dart';
6
-import 'package:lszlgl/router/my_router.dart';
7 6
 
8 7
 void main() {
9 8
   WidgetsFlutterBinding.ensureInitialized();
@@ -36,7 +35,6 @@ class MyApp extends StatelessWidget {
36 35
         ),
37 36
         useMaterial3: true,
38 37
       ),
39
-      navigatorObservers: [FlutterSmartDialog.observer],
40 38
       builder: FlutterSmartDialog.init(),
41 39
       localizationsDelegates: const [
42 40
         GlobalMaterialLocalizations.delegate,
@@ -44,8 +42,13 @@ class MyApp extends StatelessWidget {
44 42
         GlobalWidgetsLocalizations.delegate,
45 43
       ],
46 44
       supportedLocales: const [Locale('zh')],
47
-      onGenerateRoute: rOnGenerateRoute,
48
-      navigatorKey: Nav.navigatorKey,
45
+      navigatorKey: MyNavigator.navigator,
46
+      onGenerateRoute: MyNavigator.generateRoute,
47
+      navigatorObservers: [
48
+        MyNavigator.navigatorObs,
49
+        MyNavigator.routeObs,
50
+        FlutterSmartDialog.observer,
51
+      ],
49 52
     );
50 53
   }
51 54
 }

+ 1 - 2
lib/page/reap_step/reap_sample_task/reap_sample_task_page.dart

@@ -13,7 +13,6 @@ import 'package:lszlgl/page/reap_step/reap_sample_task/reap_sample_disaster_page
13 13
 import 'package:lszlgl/page/reap_step/reap_sample_task/reap_sample_medicine_page.dart';
14 14
 import 'package:lszlgl/page/reap_step/reap_sample_task/reap_sample_org_page.dart';
15 15
 import 'package:lszlgl/page/reap_step/reap_sample_task/reap_sample_variety_page.dart';
16
-import 'package:lszlgl/page/reap_step/reap_step_list_page.dart';
17 16
 
18 17
 /// 收货扦样任务
19 18
 class ReapSampleTaskPage extends StatefulWidget {
@@ -48,7 +47,7 @@ class _ReapSampleTaskPageState extends BaseState<ReapSampleTaskPage> with Ticker
48 47
   }
49 48
 
50 49
   void submit() {
51
-    Nav.pop();
50
+    MyNavigator.pop();
52 51
     SmartDialog.showToast('提交成功');
53 52
   }
54 53
 

+ 1 - 1
lib/page/user_center/change_pwd_page.dart

@@ -32,7 +32,7 @@ class _ChangePwdPageState extends BaseState<ChangePwdPage> {
32 32
 
33 33
   void onChange() {
34 34
     SmartDialog.showToast('修改成功');
35
-    Nav.pop();
35
+    MyNavigator.pop();
36 36
   }
37 37
 
38 38
   @override

+ 1 - 1
lib/page/user_center/setting_page.dart

@@ -20,7 +20,7 @@ class _SettingPageState extends BaseState<SettingPage> {
20 20
 
21 21
   void onSave() {
22 22
     SmartDialog.showToast('保存成功');
23
-    Nav.pop();
23
+    MyNavigator.pop();
24 24
   }
25 25
 
26 26
   @override

+ 346 - 19
lib/router/my_navigator.dart

@@ -1,56 +1,383 @@
1 1
 import 'package:flutter/cupertino.dart';
2
+import 'package:flutter/material.dart';
3
+import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
4
+import 'package:lszlgl/base/base_state.dart';
5
+import 'package:lszlgl/page/unknow_page.dart';
6
+import 'package:flutter_smart_dialog/src/data/animation_param.dart' as dialog;
2 7
 
3
-class Nav {
4
-  Nav._();
8
+/// 路由监听
9
+class NavigatorPageObserver extends NavigatorObserver {
10
+  static final NavigatorPageObserver instance = NavigatorPageObserver._();
5 11
 
6
-  static GlobalKey<NavigatorState> navigatorKey = GlobalKey();
12
+  NavigatorPageObserver._();
7 13
 
8
-  static NavigatorState navigator() => navigatorKey.currentState!;
14
+  /// 路由信息
15
+  /// 外部可以调用[MyNavigator.routeInfo]取值
16
+  final RouteModel routeInfo = RouteModel();
9 17
 
18
+  @override
19
+  void didPush(Route<dynamic> route, Route<dynamic>? previousRoute) {
20
+    // 路由入栈
21
+    routeInfo.update(showRoute: route, hideRoute: previousRoute);
22
+    debugPrint('路由入栈 didPush:$routeInfo');
23
+    _pageRecord();
24
+  }
25
+
26
+  @override
27
+  void didPop(Route<dynamic> route, Route<dynamic>? previousRoute) {
28
+    // 路由出栈
29
+    routeInfo.update(showRoute: previousRoute, hideRoute: route);
30
+    debugPrint('路由出栈 didPop:$routeInfo');
31
+    _pageRecord();
32
+  }
33
+
34
+  @override
35
+  void didRemove(Route<dynamic> route, Route<dynamic>? previousRoute) {
36
+    routeInfo.update(showRoute: previousRoute, hideRoute: route);
37
+    // 路由移除
38
+    debugPrint('路由移除 didRemove:$routeInfo');
39
+  }
40
+
41
+  @override
42
+  void didReplace({Route<dynamic>? newRoute, Route<dynamic>? oldRoute}) {
43
+    // 路由替换
44
+    routeInfo.update(showRoute: newRoute, hideRoute: oldRoute);
45
+    debugPrint('路由替换 didReplace:$routeInfo');
46
+    _pageRecord();
47
+  }
48
+
49
+  @override
50
+  void didStartUserGesture(Route<dynamic> route, Route<dynamic>? previousRoute) {
51
+    // 手势控制路由
52
+  }
53
+
54
+  @override
55
+  void didStopUserGesture() {
56
+    // 手势控制路由结束
57
+  }
58
+
59
+  /// 页面统计
60
+  void _pageRecord() {
61
+    if (routeInfo.hideName != null) {
62
+      // 页面关闭
63
+    }
64
+    if (routeInfo.showName != null) {
65
+      // 页面显示
66
+    }
67
+  }
68
+}
69
+
70
+class RouteModel {
71
+  /// 显示的路由
72
+  Route<dynamic>? showRoute;
73
+
74
+  /// 隐藏的路由
75
+  Route<dynamic>? hideRoute;
76
+
77
+  /// 前一个 widget 是否是一个页面(最好统一使用自定义路由)
78
+  bool get isPage => hideRoute is PageRoute;
79
+
80
+  /// 前一个 widget 是否是弹框
81
+  bool get isDialog => !isPage;
82
+
83
+  RouteModel();
84
+
85
+  void update({Route<dynamic>? showRoute, Route<dynamic>? hideRoute}) {
86
+    this.showRoute = showRoute;
87
+    this.hideRoute = hideRoute;
88
+  }
89
+
90
+  /// 显示路由的名称
91
+  String? get showName => showRoute?.settings.name;
92
+
93
+  /// 显示路由的配置信息
94
+  Object? get showPageSetting => showRoute?.settings.arguments;
95
+
96
+  /// 显示路由的业务参数
97
+  Object? get showArguments {
98
+    Object? args = showRoute!.settings.arguments;
99
+    if (args != null) {
100
+      if (args is PageSetting) {
101
+        // PageSetting的参数
102
+        return args.arguments;
103
+      } else {
104
+        // 原参数
105
+        return args;
106
+      }
107
+    }
108
+    return null;
109
+  }
110
+
111
+  /// 隐藏/移除路由的名称
112
+  String? get hideName => hideRoute?.settings.name;
113
+
114
+  /// 隐藏/移除路由的配置信息
115
+  Object? get hidePageSetting => hideRoute?.settings.arguments;
116
+
117
+  /// 隐藏/移除路由的业务参数
118
+  Object? get hideArguments {
119
+    Object? args = hideRoute!.settings.arguments;
120
+    if (args != null) {
121
+      if (args is PageSetting) {
122
+        // PageSetting的参数
123
+        return args.arguments;
124
+      } else {
125
+        // 原参数
126
+        return args;
127
+      }
128
+    }
129
+    return null;
130
+  }
131
+
132
+  @override
133
+  String toString() {
134
+    return 'showType:${showRoute.runtimeType} showName:$showName showSetting:$showPageSetting '
135
+        'hideType:${hideRoute.runtimeType} hideName:$hideName hideSetting:$hidePageSetting';
136
+  }
137
+}
138
+
139
+/// 路由页面Builder函数
140
+typedef MyNavigatorBuilder = Widget Function(BuildContext context, Object? arguments);
141
+
142
+class MyNavigator {
143
+  MyNavigator._();
144
+
145
+  /// 全局Navigator
146
+  static final GlobalKey<NavigatorState> navigator = GlobalKey<NavigatorState>();
147
+
148
+  /// 全局路由监听
149
+  static final NavigatorPageObserver navigatorObs = NavigatorPageObserver.instance;
150
+
151
+  /// 最新路由信息
152
+  static RouteModel routeInfo = navigatorObs.routeInfo;
153
+
154
+  /// Widget路由监听
155
+  static final RouteObserver<ModalRoute<void>> routeObs = RouteObserver<ModalRoute<void>>();
156
+
157
+  /// 自定义路由拦截
158
+  static Route<dynamic> generateRoute(RouteSettings settings) {
159
+    var routeName = settings.name;
160
+
161
+    // 是否dialog
162
+    bool fullscreenDialog = false;
163
+    // 是否可截屏
164
+    bool allowSnapshotting = true;
165
+    // 业务传参
166
+    Object? args;
167
+    // 页面路由样式
168
+    RouteType routeType = RouteType.cupertino;
169
+    // 获取路由配置
170
+    if (settings.arguments != null && settings.arguments is PageSetting) {
171
+      PageSetting pageSetting = settings.arguments as PageSetting;
172
+      fullscreenDialog = pageSetting.fullscreenDialog ?? false;
173
+      allowSnapshotting = pageSetting.allowSnapshotting ?? true;
174
+      routeType = pageSetting.routeType ?? RouteType.cupertino;
175
+    } else {
176
+      args = settings.arguments;
177
+    }
178
+    // 创建路由
179
+    MyNavigatorBuilder? builder = rRouteMap[routeName];
180
+    builder ??= (context, args) => UnknownPage(name: settings.name);
181
+    switch (routeType) {
182
+      case RouteType.material:
183
+        return MaterialPageRoute(
184
+          builder: (context) => builder!.call(context, args),
185
+          settings: settings,
186
+          fullscreenDialog: fullscreenDialog,
187
+          allowSnapshotting: allowSnapshotting,
188
+        );
189
+      case RouteType.normal:
190
+        return PageRouteBuilder(
191
+          pageBuilder: (context, animation, secondaryAnimation) => builder!.call(context, args),
192
+          settings: settings,
193
+          fullscreenDialog: fullscreenDialog,
194
+          allowSnapshotting: allowSnapshotting,
195
+        );
196
+      case RouteType.cupertino:
197
+      default:
198
+        return CupertinoPageRoute(
199
+          builder: (context) => builder!.call(context, args),
200
+          settings: settings,
201
+          fullscreenDialog: fullscreenDialog,
202
+          allowSnapshotting: allowSnapshotting,
203
+        );
204
+    }
205
+  }
206
+
207
+  /// 添加新页面
10 208
   static Future<T?> push<T extends Object?>(
11 209
     String name, {
12 210
     Object? args,
211
+    bool fullscreenDialog = false,
212
+    bool allowSnapshotting = true,
213
+    RouteType routeType = RouteType.cupertino,
13 214
   }) {
14
-    return navigator().pushNamed(name, arguments: args);
215
+    PageSetting setting = PageSetting(
216
+      arguments: args,
217
+      fullscreenDialog: fullscreenDialog,
218
+      allowSnapshotting: allowSnapshotting,
219
+      routeType: routeType,
220
+    );
221
+    return navigator.currentState!.pushNamed(name, arguments: setting);
15 222
   }
16 223
 
17
-  static Future<T?> pushReplacement<T extends Object?, TO extends Object?>(
224
+  /// 添加新页面 并 替换当前页面
225
+  static Future<T?> pushReplace<T extends Object?, TO extends Object?>(
18 226
     String name, {
19 227
     TO? result,
20 228
     Object? args,
229
+    bool fullscreenDialog = false,
230
+    bool allowSnapshotting = true,
231
+    RouteType routeType = RouteType.cupertino,
21 232
   }) {
22
-    return navigator().pushReplacementNamed(name, result: result, arguments: args);
233
+    PageSetting setting = PageSetting(
234
+      arguments: args,
235
+      fullscreenDialog: fullscreenDialog,
236
+      allowSnapshotting: allowSnapshotting,
237
+      routeType: routeType,
238
+    );
239
+    return navigator.currentState!.pushReplacementNamed(name, result: result, arguments: setting);
23 240
   }
24 241
 
25
-  static Future<T?> pushAndRemoveUntil<T extends Object?>(
242
+  /// 添加新页面 并 移除一些页面,直至predicate返回true
243
+  static Future<T?> pushRemoveUntil<T extends Object?>(
26 244
     String name,
27 245
     RoutePredicate predicate, {
28 246
     Object? args,
247
+    bool fullscreenDialog = false,
248
+    bool allowSnapshotting = true,
249
+    RouteType routeType = RouteType.cupertino,
29 250
   }) {
30
-    return navigator().pushNamedAndRemoveUntil(name, predicate, arguments: args);
251
+    PageSetting setting = PageSetting(
252
+      arguments: args,
253
+      fullscreenDialog: fullscreenDialog,
254
+      allowSnapshotting: allowSnapshotting,
255
+      routeType: routeType,
256
+    );
257
+    return navigator.currentState!.pushNamedAndRemoveUntil(name, predicate, arguments: setting);
31 258
   }
32 259
 
260
+  /// 移除路由栈顶页面
33 261
   static void pop<T extends Object?>([T? result]) {
34
-    return navigator().pop(result);
35
-  }
36
-
37
-  static void popUntil(RoutePredicate predicate) {
38
-    return navigator().popUntil(predicate);
262
+    return navigator.currentState!.pop(result);
39 263
   }
40 264
 
265
+  /// 移除路由栈顶页面 并 添加新页面
41 266
   static Future<T?> popAndPush<T extends Object?, TO extends Object?>(
42 267
     String name, {
43 268
     TO? result,
44 269
     Object? args,
270
+    bool fullscreenDialog = false,
271
+    bool allowSnapshotting = true,
272
+    RouteType routeType = RouteType.cupertino,
45 273
   }) {
46
-    return navigator().popAndPushNamed(name, result: result, arguments: args);
274
+    PageSetting setting = PageSetting(
275
+      arguments: args,
276
+      fullscreenDialog: fullscreenDialog,
277
+      allowSnapshotting: allowSnapshotting,
278
+      routeType: routeType,
279
+    );
280
+    return navigator.currentState!.popAndPushNamed(name, result: result, arguments: setting);
47 281
   }
48 282
 
49
-  static bool canPop() {
50
-    return navigator().canPop();
283
+  /// 移除一些页面, 直至predicate返回true
284
+  static void popUntil(RoutePredicate predicate) {
285
+    return navigator.currentState!.popUntil(predicate);
51 286
   }
52 287
 
53
-  static Future<bool> maybePop<T extends Object?>([T? result]) {
54
-    return navigator().maybePop(result);
288
+  /// 显示Dialog
289
+  static Future<T?> pushDialog<T>({
290
+    required WidgetBuilder builder,
291
+    SmartDialogController? controller,
292
+    Alignment? alignment,
293
+    bool? clickMaskDismiss,
294
+    bool? usePenetrate,
295
+    bool? useAnimation,
296
+    SmartAnimationType? animationType,
297
+    List<SmartNonAnimationType>? nonAnimationTypes,
298
+    dialog.AnimationBuilder? animationBuilder,
299
+    Duration? animationTime,
300
+    Color? maskColor,
301
+    Widget? maskWidget,
302
+    bool? debounce,
303
+    VoidCallback? onDismiss,
304
+    VoidCallback? onMask,
305
+    Duration? displayTime,
306
+    String? tag,
307
+    bool? backDismiss,
308
+    bool? keepSingle,
309
+    bool? permanent,
310
+    bool? useSystem,
311
+    bool? bindPage,
312
+    BuildContext? bindWidget,
313
+    Rect? ignoreArea,
314
+  }) {
315
+    return SmartDialog.show(
316
+      builder: builder,
317
+      controller: controller,
318
+      alignment: alignment,
319
+      clickMaskDismiss: clickMaskDismiss,
320
+      usePenetrate: usePenetrate,
321
+      useAnimation: useAnimation,
322
+      animationType: animationType,
323
+      nonAnimationTypes: nonAnimationTypes,
324
+      animationBuilder: animationBuilder,
325
+      animationTime: animationTime,
326
+      maskColor: maskColor,
327
+      maskWidget: maskWidget,
328
+      debounce: debounce,
329
+      onDismiss: onDismiss,
330
+      onMask: onMask,
331
+      displayTime: displayTime,
332
+      tag: tag,
333
+      backDismiss: backDismiss,
334
+      keepSingle: keepSingle,
335
+      permanent: permanent,
336
+      useSystem: useSystem,
337
+      bindPage: bindPage,
338
+      bindWidget: bindWidget,
339
+      ignoreArea: ignoreArea,
340
+    );
55 341
   }
56 342
 }
343
+
344
+/// 页面设置信息
345
+class PageSetting {
346
+  /// 全屏Dialog
347
+  final bool? fullscreenDialog;
348
+
349
+  /// 是否可截屏
350
+  final bool? allowSnapshotting;
351
+
352
+  /// 页面类型
353
+  final RouteType? routeType;
354
+
355
+  /// 业务参数
356
+  final Object? arguments;
357
+
358
+  PageSetting({
359
+    this.fullscreenDialog,
360
+    this.allowSnapshotting,
361
+    this.routeType = RouteType.cupertino,
362
+    this.arguments,
363
+  });
364
+
365
+  @override
366
+  String toString() => {
367
+        'fullscreenDialog': fullscreenDialog,
368
+        'allowSnapshotting': allowSnapshotting,
369
+        'routeType': routeType,
370
+        'arguments': arguments,
371
+      }.toString();
372
+}
373
+
374
+enum RouteType {
375
+  /// iOS样式路由
376
+  cupertino,
377
+
378
+  /// Android样式路由
379
+  material,
380
+
381
+  /// 普通路由(无动画效果)
382
+  normal,
383
+}

+ 12 - 31
lib/router/my_router.dart

@@ -1,33 +1,12 @@
1
-import 'package:flutter/cupertino.dart';
2 1
 import 'package:lszlgl/page/login/login_page.dart';
3 2
 import 'package:lszlgl/page/main_tab_page.dart';
4 3
 import 'package:lszlgl/page/reap_step/reap_sample_task/reap_sample_task_page.dart';
5 4
 import 'package:lszlgl/page/reap_step/reap_step_tab_page.dart';
6
-import 'package:lszlgl/page/unknow_page.dart';
7 5
 import 'package:lszlgl/page/user_center/account_manage_page.dart';
8 6
 import 'package:lszlgl/page/user_center/change_pwd_page.dart';
9 7
 import 'package:lszlgl/page/user_center/setting_page.dart';
10 8
 import 'package:lszlgl/router/my_navigator.dart';
11 9
 
12
-/// 创建页面函数
13
-typedef PageBuilder = Widget Function(BuildContext context, Object? args);
14
-
15
-/// 路由拦截
16
-RouteFactory rOnGenerateRoute = (RouteSettings settings) {
17
-  debugPrint('name:${settings.name} arguments:${settings.arguments} ');
18
-  // 获取对应名称的页面
19
-  PageBuilder? pageBuilder = rRoutes[settings.name];
20
-  // 未知页面
21
-  pageBuilder ??= (context, args) => UnknownPage(name: settings.name);
22
-  return CupertinoPageRoute(
23
-    settings: settings,
24
-    builder: (context) => pageBuilder!.call(
25
-      context,
26
-      settings.arguments,
27
-    ),
28
-  );
29
-};
30
-
31 10
 // 根页面
32 11
 const rLoginPage = '/';
33 12
 // 主页
@@ -43,7 +22,7 @@ const rReapStepTabPage = '/ReapStepTabPage';
43 22
 // 收获扦样任务
44 23
 const rReapSampleTaskPage = '/ReapSampleTaskPage';
45 24
 
46
-final Map<String, PageBuilder> rRoutes = {
25
+final Map<String, MyNavigatorBuilder> rRouteMap = {
47 26
   // 根页面
48 27
   rLoginPage: (context, args) => const LoginPage(),
49 28
   rMainTabPage: (context, args) => const MainTabPage(),
@@ -60,43 +39,45 @@ class MyRouter {
60 39
   /// 登录
61 40
   static void startLogin({bool popAll = false}) {
62 41
     if (popAll) {
63
-      Nav.pushAndRemoveUntil(rLoginPage, (route) => false);
42
+      MyNavigator.pushRemoveUntil(rLoginPage, (route) => false);
64 43
     } else {
65
-      Nav.push(rLoginPage);
44
+      MyNavigator.push(rLoginPage);
66 45
     }
67 46
   }
68 47
 
69 48
   /// 主页
70 49
   static void startMain({bool popAll = false}) {
71 50
     if (popAll) {
72
-      Nav.pushAndRemoveUntil(rMainTabPage, (route) => false);
51
+      MyNavigator.pushRemoveUntil(rMainTabPage, (route) => false);
73 52
     } else {
74
-      Nav.push(rMainTabPage);
53
+      MyNavigator.push(rMainTabPage);
75 54
     }
76 55
   }
77 56
 
78 57
   /// 账号管理
79 58
   static void startAccountManage() {
80
-    Nav.push(rAccountManagePage);
59
+    MyNavigator.push(rAccountManagePage);
81 60
   }
82 61
 
83 62
   /// 设置
84 63
   static void startSetting() {
85
-    Nav.push(rSettingPage);
64
+    MyNavigator.push(rSettingPage);
86 65
   }
87 66
 
88 67
   /// 修改密码
89 68
   static void startChangePwd() {
90
-    Nav.push(rChangePwdPage);
69
+    MyNavigator.push(rChangePwdPage);
91 70
   }
92 71
 
93 72
   /// 收获环节列表
94 73
   static void startReapStepList(ReapStepTabPageArgs args) {
95
-    Nav.push(rReapStepTabPage, args: args);
74
+    MyNavigator.push(rReapStepTabPage, args: args);
96 75
   }
97 76
 
98 77
   /// 收获扦样任务
99 78
   static void startReapSampleTask({bool detail = false}) {
100
-    Nav.push(rReapSampleTaskPage, args: detail);
79
+    MyNavigator.push(rReapSampleTaskPage, args: detail);
101 80
   }
102 81
 }
82
+
83
+

+ 1 - 0
macos/Flutter/Flutter-Debug.xcconfig

@@ -1 +1,2 @@
1
+#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
1 2
 #include "ephemeral/Flutter-Generated.xcconfig"

+ 1 - 0
macos/Flutter/Flutter-Release.xcconfig

@@ -1 +1,2 @@
1
+#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
1 2
 #include "ephemeral/Flutter-Generated.xcconfig"

+ 80 - 64
pubspec.lock

@@ -6,7 +6,7 @@ packages:
6 6
     description:
7 7
       name: async
8 8
       sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
9
-      url: "https://pub.flutter-io.cn"
9
+      url: "https://pub.dev"
10 10
     source: hosted
11 11
     version: "2.11.0"
12 12
   boolean_selector:
@@ -14,7 +14,7 @@ packages:
14 14
     description:
15 15
       name: boolean_selector
16 16
       sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
17
-      url: "https://pub.flutter-io.cn"
17
+      url: "https://pub.dev"
18 18
     source: hosted
19 19
     version: "2.1.1"
20 20
   cached_network_image:
@@ -22,7 +22,7 @@ packages:
22 22
     description:
23 23
       name: cached_network_image
24 24
       sha256: "28ea9690a8207179c319965c13cd8df184d5ee721ae2ce60f398ced1219cea1f"
25
-      url: "https://pub.flutter-io.cn"
25
+      url: "https://pub.dev"
26 26
     source: hosted
27 27
     version: "3.3.1"
28 28
   cached_network_image_platform_interface:
@@ -30,7 +30,7 @@ packages:
30 30
     description:
31 31
       name: cached_network_image_platform_interface
32 32
       sha256: "9e90e78ae72caa874a323d78fa6301b3fb8fa7ea76a8f96dc5b5bf79f283bf2f"
33
-      url: "https://pub.flutter-io.cn"
33
+      url: "https://pub.dev"
34 34
     source: hosted
35 35
     version: "4.0.0"
36 36
   cached_network_image_web:
@@ -38,7 +38,7 @@ packages:
38 38
     description:
39 39
       name: cached_network_image_web
40 40
       sha256: "42a835caa27c220d1294311ac409a43361088625a4f23c820b006dd9bffb3316"
41
-      url: "https://pub.flutter-io.cn"
41
+      url: "https://pub.dev"
42 42
     source: hosted
43 43
     version: "1.1.1"
44 44
   card_swiper:
@@ -46,7 +46,7 @@ packages:
46 46
     description:
47 47
       name: card_swiper
48 48
       sha256: "21e52a144decbf0054e7cfed8bbe46fc89635e6c86b767eaccfe7d5aeba32528"
49
-      url: "https://pub.flutter-io.cn"
49
+      url: "https://pub.dev"
50 50
     source: hosted
51 51
     version: "3.0.1"
52 52
   characters:
@@ -54,7 +54,7 @@ packages:
54 54
     description:
55 55
       name: characters
56 56
       sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
57
-      url: "https://pub.flutter-io.cn"
57
+      url: "https://pub.dev"
58 58
     source: hosted
59 59
     version: "1.3.0"
60 60
   clock:
@@ -62,7 +62,7 @@ packages:
62 62
     description:
63 63
       name: clock
64 64
       sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
65
-      url: "https://pub.flutter-io.cn"
65
+      url: "https://pub.dev"
66 66
     source: hosted
67 67
     version: "1.1.1"
68 68
   collection:
@@ -70,7 +70,7 @@ packages:
70 70
     description:
71 71
       name: collection
72 72
       sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a
73
-      url: "https://pub.flutter-io.cn"
73
+      url: "https://pub.dev"
74 74
     source: hosted
75 75
     version: "1.18.0"
76 76
   crypto:
@@ -78,7 +78,7 @@ packages:
78 78
     description:
79 79
       name: crypto
80 80
       sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab
81
-      url: "https://pub.flutter-io.cn"
81
+      url: "https://pub.dev"
82 82
     source: hosted
83 83
     version: "3.0.3"
84 84
   cupertino_icons:
@@ -86,7 +86,7 @@ packages:
86 86
     description:
87 87
       name: cupertino_icons
88 88
       sha256: d57953e10f9f8327ce64a508a355f0b1ec902193f66288e8cb5070e7c47eeb2d
89
-      url: "https://pub.flutter-io.cn"
89
+      url: "https://pub.dev"
90 90
     source: hosted
91 91
     version: "1.0.6"
92 92
   date_format:
@@ -94,7 +94,7 @@ packages:
94 94
     description:
95 95
       name: date_format
96 96
       sha256: "8e5154ca363411847220c8cbc43afcf69c08e8debe40ba09d57710c25711760c"
97
-      url: "https://pub.flutter-io.cn"
97
+      url: "https://pub.dev"
98 98
     source: hosted
99 99
     version: "2.0.7"
100 100
   device_info_plus:
@@ -102,7 +102,7 @@ packages:
102 102
     description:
103 103
       name: device_info_plus
104 104
       sha256: "77f757b789ff68e4eaf9c56d1752309bd9f7ad557cb105b938a7f8eb89e59110"
105
-      url: "https://pub.flutter-io.cn"
105
+      url: "https://pub.dev"
106 106
     source: hosted
107 107
     version: "9.1.2"
108 108
   device_info_plus_platform_interface:
@@ -110,7 +110,7 @@ packages:
110 110
     description:
111 111
       name: device_info_plus_platform_interface
112 112
       sha256: d3b01d5868b50ae571cd1dc6e502fc94d956b665756180f7b16ead09e836fd64
113
-      url: "https://pub.flutter-io.cn"
113
+      url: "https://pub.dev"
114 114
     source: hosted
115 115
     version: "7.0.0"
116 116
   fake_async:
@@ -118,7 +118,7 @@ packages:
118 118
     description:
119 119
       name: fake_async
120 120
       sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
121
-      url: "https://pub.flutter-io.cn"
121
+      url: "https://pub.dev"
122 122
     source: hosted
123 123
     version: "1.3.1"
124 124
   ffi:
@@ -126,7 +126,7 @@ packages:
126 126
     description:
127 127
       name: ffi
128 128
       sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878"
129
-      url: "https://pub.flutter-io.cn"
129
+      url: "https://pub.dev"
130 130
     source: hosted
131 131
     version: "2.1.0"
132 132
   file:
@@ -134,7 +134,7 @@ packages:
134 134
     description:
135 135
       name: file
136 136
       sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c"
137
-      url: "https://pub.flutter-io.cn"
137
+      url: "https://pub.dev"
138 138
     source: hosted
139 139
     version: "7.0.0"
140 140
   fixnum:
@@ -142,7 +142,7 @@ packages:
142 142
     description:
143 143
       name: fixnum
144 144
       sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1"
145
-      url: "https://pub.flutter-io.cn"
145
+      url: "https://pub.dev"
146 146
     source: hosted
147 147
     version: "1.1.0"
148 148
   flutter:
@@ -155,7 +155,7 @@ packages:
155 155
     description:
156 156
       name: flutter_cache_manager
157 157
       sha256: "8207f27539deb83732fdda03e259349046a39a4c767269285f449ade355d54ba"
158
-      url: "https://pub.flutter-io.cn"
158
+      url: "https://pub.dev"
159 159
     source: hosted
160 160
     version: "3.3.1"
161 161
   flutter_keyboard_visibility:
@@ -163,7 +163,7 @@ packages:
163 163
     description:
164 164
       name: flutter_keyboard_visibility
165 165
       sha256: "98664be7be0e3ffca00de50f7f6a287ab62c763fc8c762e0a21584584a3ff4f8"
166
-      url: "https://pub.flutter-io.cn"
166
+      url: "https://pub.dev"
167 167
     source: hosted
168 168
     version: "6.0.0"
169 169
   flutter_keyboard_visibility_linux:
@@ -171,7 +171,7 @@ packages:
171 171
     description:
172 172
       name: flutter_keyboard_visibility_linux
173 173
       sha256: "6fba7cd9bb033b6ddd8c2beb4c99ad02d728f1e6e6d9b9446667398b2ac39f08"
174
-      url: "https://pub.flutter-io.cn"
174
+      url: "https://pub.dev"
175 175
     source: hosted
176 176
     version: "1.0.0"
177 177
   flutter_keyboard_visibility_macos:
@@ -179,7 +179,7 @@ packages:
179 179
     description:
180 180
       name: flutter_keyboard_visibility_macos
181 181
       sha256: c5c49b16fff453dfdafdc16f26bdd8fb8d55812a1d50b0ce25fc8d9f2e53d086
182
-      url: "https://pub.flutter-io.cn"
182
+      url: "https://pub.dev"
183 183
     source: hosted
184 184
     version: "1.0.0"
185 185
   flutter_keyboard_visibility_platform_interface:
@@ -187,7 +187,7 @@ packages:
187 187
     description:
188 188
       name: flutter_keyboard_visibility_platform_interface
189 189
       sha256: e43a89845873f7be10cb3884345ceb9aebf00a659f479d1c8f4293fcb37022a4
190
-      url: "https://pub.flutter-io.cn"
190
+      url: "https://pub.dev"
191 191
     source: hosted
192 192
     version: "2.0.0"
193 193
   flutter_keyboard_visibility_web:
@@ -195,7 +195,7 @@ packages:
195 195
     description:
196 196
       name: flutter_keyboard_visibility_web
197 197
       sha256: d3771a2e752880c79203f8d80658401d0c998e4183edca05a149f5098ce6e3d1
198
-      url: "https://pub.flutter-io.cn"
198
+      url: "https://pub.dev"
199 199
     source: hosted
200 200
     version: "2.0.0"
201 201
   flutter_keyboard_visibility_windows:
@@ -203,7 +203,7 @@ packages:
203 203
     description:
204 204
       name: flutter_keyboard_visibility_windows
205 205
       sha256: fc4b0f0b6be9b93ae527f3d527fb56ee2d918cd88bbca438c478af7bcfd0ef73
206
-      url: "https://pub.flutter-io.cn"
206
+      url: "https://pub.dev"
207 207
     source: hosted
208 208
     version: "1.0.0"
209 209
   flutter_lints:
@@ -211,7 +211,7 @@ packages:
211 211
     description:
212 212
       name: flutter_lints
213 213
       sha256: a25a15ebbdfc33ab1cd26c63a6ee519df92338a9c10f122adda92938253bef04
214
-      url: "https://pub.flutter-io.cn"
214
+      url: "https://pub.dev"
215 215
     source: hosted
216 216
     version: "2.0.3"
217 217
   flutter_localizations:
@@ -224,7 +224,7 @@ packages:
224 224
     description:
225 225
       name: flutter_smart_dialog
226 226
       sha256: e9ee69eeac16165d142f1974b4db05ca9846cffafb7c94674a38ec07d7e6cda1
227
-      url: "https://pub.flutter-io.cn"
227
+      url: "https://pub.dev"
228 228
     source: hosted
229 229
     version: "4.9.6"
230 230
   flutter_test:
@@ -242,7 +242,7 @@ packages:
242 242
     description:
243 243
       name: http
244 244
       sha256: a2bbf9d017fcced29139daa8ed2bba4ece450ab222871df93ca9eec6f80c34ba
245
-      url: "https://pub.flutter-io.cn"
245
+      url: "https://pub.dev"
246 246
     source: hosted
247 247
     version: "1.2.0"
248 248
   http_parser:
@@ -250,7 +250,7 @@ packages:
250 250
     description:
251 251
       name: http_parser
252 252
       sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b"
253
-      url: "https://pub.flutter-io.cn"
253
+      url: "https://pub.dev"
254 254
     source: hosted
255 255
     version: "4.0.2"
256 256
   intl:
@@ -258,7 +258,7 @@ packages:
258 258
     description:
259 259
       name: intl
260 260
       sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d"
261
-      url: "https://pub.flutter-io.cn"
261
+      url: "https://pub.dev"
262 262
     source: hosted
263 263
     version: "0.18.1"
264 264
   lints:
@@ -266,7 +266,7 @@ packages:
266 266
     description:
267 267
       name: lints
268 268
       sha256: "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452"
269
-      url: "https://pub.flutter-io.cn"
269
+      url: "https://pub.dev"
270 270
     source: hosted
271 271
     version: "2.1.1"
272 272
   matcher:
@@ -274,7 +274,7 @@ packages:
274 274
     description:
275 275
       name: matcher
276 276
       sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e"
277
-      url: "https://pub.flutter-io.cn"
277
+      url: "https://pub.dev"
278 278
     source: hosted
279 279
     version: "0.12.16"
280 280
   material_color_utilities:
@@ -282,7 +282,7 @@ packages:
282 282
     description:
283 283
       name: material_color_utilities
284 284
       sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41"
285
-      url: "https://pub.flutter-io.cn"
285
+      url: "https://pub.dev"
286 286
     source: hosted
287 287
     version: "0.5.0"
288 288
   meta:
@@ -290,7 +290,7 @@ packages:
290 290
     description:
291 291
       name: meta
292 292
       sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e
293
-      url: "https://pub.flutter-io.cn"
293
+      url: "https://pub.dev"
294 294
     source: hosted
295 295
     version: "1.10.0"
296 296
   octo_image:
@@ -298,7 +298,7 @@ packages:
298 298
     description:
299 299
       name: octo_image
300 300
       sha256: "45b40f99622f11901238e18d48f5f12ea36426d8eced9f4cbf58479c7aa2430d"
301
-      url: "https://pub.flutter-io.cn"
301
+      url: "https://pub.dev"
302 302
     source: hosted
303 303
     version: "2.0.0"
304 304
   package_info_plus:
@@ -306,7 +306,7 @@ packages:
306 306
     description:
307 307
       name: package_info_plus
308 308
       sha256: "7e76fad405b3e4016cd39d08f455a4eb5199723cf594cd1b8916d47140d93017"
309
-      url: "https://pub.flutter-io.cn"
309
+      url: "https://pub.dev"
310 310
     source: hosted
311 311
     version: "4.2.0"
312 312
   package_info_plus_platform_interface:
@@ -314,7 +314,7 @@ packages:
314 314
     description:
315 315
       name: package_info_plus_platform_interface
316 316
       sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6"
317
-      url: "https://pub.flutter-io.cn"
317
+      url: "https://pub.dev"
318 318
     source: hosted
319 319
     version: "2.0.1"
320 320
   path:
@@ -322,7 +322,7 @@ packages:
322 322
     description:
323 323
       name: path
324 324
       sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917"
325
-      url: "https://pub.flutter-io.cn"
325
+      url: "https://pub.dev"
326 326
     source: hosted
327 327
     version: "1.8.3"
328 328
   path_provider:
@@ -330,7 +330,7 @@ packages:
330 330
     description:
331 331
       name: path_provider
332 332
       sha256: b27217933eeeba8ff24845c34003b003b2b22151de3c908d0e679e8fe1aa078b
333
-      url: "https://pub.flutter-io.cn"
333
+      url: "https://pub.dev"
334 334
     source: hosted
335 335
     version: "2.1.2"
336 336
   path_provider_android:
@@ -338,7 +338,7 @@ packages:
338 338
     description:
339 339
       name: path_provider_android
340 340
       sha256: "477184d672607c0a3bf68fbbf601805f92ef79c82b64b4d6eb318cbca4c48668"
341
-      url: "https://pub.flutter-io.cn"
341
+      url: "https://pub.dev"
342 342
     source: hosted
343 343
     version: "2.2.2"
344 344
   path_provider_foundation:
@@ -346,7 +346,7 @@ packages:
346 346
     description:
347 347
       name: path_provider_foundation
348 348
       sha256: "5a7999be66e000916500be4f15a3633ebceb8302719b47b9cc49ce924125350f"
349
-      url: "https://pub.flutter-io.cn"
349
+      url: "https://pub.dev"
350 350
     source: hosted
351 351
     version: "2.3.2"
352 352
   path_provider_linux:
@@ -354,7 +354,7 @@ packages:
354 354
     description:
355 355
       name: path_provider_linux
356 356
       sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279
357
-      url: "https://pub.flutter-io.cn"
357
+      url: "https://pub.dev"
358 358
     source: hosted
359 359
     version: "2.2.1"
360 360
   path_provider_platform_interface:
@@ -362,7 +362,7 @@ packages:
362 362
     description:
363 363
       name: path_provider_platform_interface
364 364
       sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334"
365
-      url: "https://pub.flutter-io.cn"
365
+      url: "https://pub.dev"
366 366
     source: hosted
367 367
     version: "2.1.2"
368 368
   path_provider_windows:
@@ -370,7 +370,7 @@ packages:
370 370
     description:
371 371
       name: path_provider_windows
372 372
       sha256: "8bc9f22eee8690981c22aa7fc602f5c85b497a6fb2ceb35ee5a5e5ed85ad8170"
373
-      url: "https://pub.flutter-io.cn"
373
+      url: "https://pub.dev"
374 374
     source: hosted
375 375
     version: "2.2.1"
376 376
   platform:
@@ -378,7 +378,7 @@ packages:
378 378
     description:
379 379
       name: platform
380 380
       sha256: "12220bb4b65720483f8fa9450b4332347737cf8213dd2840d8b2c823e47243ec"
381
-      url: "https://pub.flutter-io.cn"
381
+      url: "https://pub.dev"
382 382
     source: hosted
383 383
     version: "3.1.4"
384 384
   plugin_platform_interface:
@@ -386,7 +386,7 @@ packages:
386 386
     description:
387 387
       name: plugin_platform_interface
388 388
       sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02"
389
-      url: "https://pub.flutter-io.cn"
389
+      url: "https://pub.dev"
390 390
     source: hosted
391 391
     version: "2.1.8"
392 392
   rxdart:
@@ -394,7 +394,7 @@ packages:
394 394
     description:
395 395
       name: rxdart
396 396
       sha256: "0c7c0cedd93788d996e33041ffecda924cc54389199cde4e6a34b440f50044cb"
397
-      url: "https://pub.flutter-io.cn"
397
+      url: "https://pub.dev"
398 398
     source: hosted
399 399
     version: "0.27.7"
400 400
   sky_engine:
@@ -407,7 +407,7 @@ packages:
407 407
     description:
408 408
       name: source_span
409 409
       sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
410
-      url: "https://pub.flutter-io.cn"
410
+      url: "https://pub.dev"
411 411
     source: hosted
412 412
     version: "1.10.0"
413 413
   sprintf:
@@ -415,7 +415,7 @@ packages:
415 415
     description:
416 416
       name: sprintf
417 417
       sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23"
418
-      url: "https://pub.flutter-io.cn"
418
+      url: "https://pub.dev"
419 419
     source: hosted
420 420
     version: "7.0.0"
421 421
   sqflite:
@@ -423,7 +423,7 @@ packages:
423 423
     description:
424 424
       name: sqflite
425 425
       sha256: a9016f495c927cb90557c909ff26a6d92d9bd54fc42ba92e19d4e79d61e798c6
426
-      url: "https://pub.flutter-io.cn"
426
+      url: "https://pub.dev"
427 427
     source: hosted
428 428
     version: "2.3.2"
429 429
   sqflite_common:
@@ -431,7 +431,7 @@ packages:
431 431
     description:
432 432
       name: sqflite_common
433 433
       sha256: "28d8c66baee4968519fb8bd6cdbedad982d6e53359091f0b74544a9f32ec72d5"
434
-      url: "https://pub.flutter-io.cn"
434
+      url: "https://pub.dev"
435 435
     source: hosted
436 436
     version: "2.5.3"
437 437
   stack_trace:
@@ -439,7 +439,7 @@ packages:
439 439
     description:
440 440
       name: stack_trace
441 441
       sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b"
442
-      url: "https://pub.flutter-io.cn"
442
+      url: "https://pub.dev"
443 443
     source: hosted
444 444
     version: "1.11.1"
445 445
   stream_channel:
@@ -447,7 +447,7 @@ packages:
447 447
     description:
448 448
       name: stream_channel
449 449
       sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
450
-      url: "https://pub.flutter-io.cn"
450
+      url: "https://pub.dev"
451 451
     source: hosted
452 452
     version: "2.1.2"
453 453
   string_scanner:
@@ -455,15 +455,31 @@ packages:
455 455
     description:
456 456
       name: string_scanner
457 457
       sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde"
458
-      url: "https://pub.flutter-io.cn"
458
+      url: "https://pub.dev"
459 459
     source: hosted
460 460
     version: "1.2.0"
461
+  syncfusion_flutter_core:
462
+    dependency: transitive
463
+    description:
464
+      name: syncfusion_flutter_core
465
+      sha256: e8580e201c7197feac830b501889e877796a9fabbe20dcdbe90a981603939101
466
+      url: "https://pub.dev"
467
+    source: hosted
468
+    version: "24.2.4"
469
+  syncfusion_flutter_datepicker:
470
+    dependency: "direct main"
471
+    description:
472
+      name: syncfusion_flutter_datepicker
473
+      sha256: "7d1ce5501c96ba1df68b833436f21e8ab46b7be5de0a99d7d8017fd3932cc0f5"
474
+      url: "https://pub.dev"
475
+    source: hosted
476
+    version: "24.2.4"
461 477
   synchronized:
462 478
     dependency: transitive
463 479
     description:
464 480
       name: synchronized
465 481
       sha256: "539ef412b170d65ecdafd780f924e5be3f60032a1128df156adad6c5b373d558"
466
-      url: "https://pub.flutter-io.cn"
482
+      url: "https://pub.dev"
467 483
     source: hosted
468 484
     version: "3.1.0+1"
469 485
   term_glyph:
@@ -471,7 +487,7 @@ packages:
471 487
     description:
472 488
       name: term_glyph
473 489
       sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
474
-      url: "https://pub.flutter-io.cn"
490
+      url: "https://pub.dev"
475 491
     source: hosted
476 492
     version: "1.2.1"
477 493
   test_api:
@@ -479,7 +495,7 @@ packages:
479 495
     description:
480 496
       name: test_api
481 497
       sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b"
482
-      url: "https://pub.flutter-io.cn"
498
+      url: "https://pub.dev"
483 499
     source: hosted
484 500
     version: "0.6.1"
485 501
   typed_data:
@@ -487,7 +503,7 @@ packages:
487 503
     description:
488 504
       name: typed_data
489 505
       sha256: facc8d6582f16042dd49f2463ff1bd6e2c9ef9f3d5da3d9b087e244a7b564b3c
490
-      url: "https://pub.flutter-io.cn"
506
+      url: "https://pub.dev"
491 507
     source: hosted
492 508
     version: "1.3.2"
493 509
   uuid:
@@ -495,7 +511,7 @@ packages:
495 511
     description:
496 512
       name: uuid
497 513
       sha256: cd210a09f7c18cbe5a02511718e0334de6559871052c90a90c0cca46a4aa81c8
498
-      url: "https://pub.flutter-io.cn"
514
+      url: "https://pub.dev"
499 515
     source: hosted
500 516
     version: "4.3.3"
501 517
   vector_math:
@@ -503,7 +519,7 @@ packages:
503 519
     description:
504 520
       name: vector_math
505 521
       sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
506
-      url: "https://pub.flutter-io.cn"
522
+      url: "https://pub.dev"
507 523
     source: hosted
508 524
     version: "2.1.4"
509 525
   web:
@@ -511,7 +527,7 @@ packages:
511 527
     description:
512 528
       name: web
513 529
       sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152
514
-      url: "https://pub.flutter-io.cn"
530
+      url: "https://pub.dev"
515 531
     source: hosted
516 532
     version: "0.3.0"
517 533
   win32:
@@ -519,7 +535,7 @@ packages:
519 535
     description:
520 536
       name: win32
521 537
       sha256: "464f5674532865248444b4c3daca12bd9bf2d7c47f759ce2617986e7229494a8"
522
-      url: "https://pub.flutter-io.cn"
538
+      url: "https://pub.dev"
523 539
     source: hosted
524 540
     version: "5.2.0"
525 541
   win32_registry:
@@ -527,7 +543,7 @@ packages:
527 543
     description:
528 544
       name: win32_registry
529 545
       sha256: "41fd8a189940d8696b1b810efb9abcf60827b6cbfab90b0c43e8439e3a39d85a"
530
-      url: "https://pub.flutter-io.cn"
546
+      url: "https://pub.dev"
531 547
     source: hosted
532 548
     version: "1.1.2"
533 549
   xdg_directories:
@@ -535,7 +551,7 @@ packages:
535 551
     description:
536 552
       name: xdg_directories
537 553
       sha256: faea9dee56b520b55a566385b84f2e8de55e7496104adada9962e0bd11bcff1d
538
-      url: "https://pub.flutter-io.cn"
554
+      url: "https://pub.dev"
539 555
     source: hosted
540 556
     version: "1.0.4"
541 557
 sdks: