张延森 3 anni fa
parent
commit
6e7d3a8898

BIN
images/decorate.png Vedi File


+ 46
- 0
lib/models/entities/ExtendContent.dart Vedi File

@@ -0,0 +1,46 @@
1
+
2
+class ExtendContent {
3
+  // 租户号
4
+  String? extId;
5
+
6
+  // 扩展对象类型;message消息表 bannar轮播图 info资讯
7
+  String? targetType;
8
+
9
+  // 拓展对象Id
10
+  String? targetId;
11
+
12
+  // 内容类型;text文本 image图片
13
+  String? contentType;
14
+
15
+  // 内容
16
+  String? content;
17
+
18
+  // 排序
19
+  int? sort;
20
+
21
+  // 创建时间
22
+  String? createDate;
23
+
24
+  ExtendContent();
25
+
26
+  ExtendContent.simple({ this.content, this.contentType });
27
+
28
+  ExtendContent.fromJson(Map<String, dynamic> json)
29
+      : extId = json["extId"],
30
+        targetType = json["targetType"],
31
+        targetId = json["targetId"],
32
+        contentType = json["contentType"],
33
+        content = json["content"],
34
+        sort = json["sort"],
35
+        createDate = json["createDate"];
36
+
37
+  Map<String, dynamic> toJson() => {
38
+    'extId' : extId,
39
+    'targetType' : targetType,
40
+    'targetId' : targetId,
41
+    'contentType' : contentType,
42
+    'content' : content,
43
+    'sort' : sort,
44
+    'createDate' : createDate,
45
+  };
46
+}

+ 3
- 1
lib/pages/machinery/detail/index.dart Vedi File

@@ -18,7 +18,9 @@ class MachineryDetailPage extends StatelessWidget {
18 18
 
19 19
     return Scaffold(
20 20
       appBar: appBar,
21
-      body: page(context: context, appbarSize: appBar.preferredSize, handleClick: handleClick),
21
+      body: SingleChildScrollView(
22
+        child: page(context: context, handleClick: handleClick),
23
+      ),
22 24
     );
23 25
   }
24 26
 

+ 50
- 33
lib/pages/machinery/detail/widgets/detail.dart Vedi File

@@ -1,53 +1,44 @@
1 1
 
2
+import 'package:farmer_client/pages/machinery/widgets/DefLayout.dart';
3
+import 'package:farmer_client/pages/machinery/widgets/RoundButton.dart';
2 4
 import 'package:flutter/widgets.dart';
3 5
 import 'package:flutter/material.dart';
4 6
 import 'package:flutter_screenutil/flutter_screenutil.dart';
5
-
7
+import 'package:farmer_client/widgets/ExtendContentList.dart';
8
+import 'package:farmer_client/models/entities/ExtendContent.dart';
6 9
 import '../../widgets/summary.dart';
7 10
 
8
-Widget page({ required BuildContext context, required Size appbarSize, required void Function() handleClick}) {
11
+Widget page({ required BuildContext context, VoidCallback? handleClick}) {
9 12
   final _offset = 20.w;
10 13
   final width = MediaQuery.of(context).size.width;
11
-  final height = MediaQuery.of(context).size.height
12
-      - appbarSize.height
13
-      - MediaQuery.of(context).padding.top;
14 14
   final _bannerHeight = 250.w;
15 15
   final img = 'https://yz-websit.oss-cn-hangzhou.aliyuncs.com/xlk/index-icon19.jpg';
16 16
 
17
-  return Stack(
18
-    alignment: Alignment.topCenter,
17
+  final list = <ExtendContent>[
18
+    ExtendContent.simple(content: img, contentType: "image" ),
19
+    ExtendContent.simple(content: "有时,你可能想要创建一个水平滑动(而不是竖直滑动)的列表。 ListView widget 本身就支持水平列表的创建。我们将会使用标准的 ListView 构造方法,通过指定 scrollDirection 的值为水平方向,来覆盖默认的竖直方向。", contentType: "text" ),
20
+    ExtendContent.simple(content: img, contentType: "image" ),
21
+    ExtendContent.simple(content: "有时,你可能想要创建一个水平滑动(而不是竖直滑动)的列表。 ListView widget 本身就支持水平列表的创建。我们将会使用标准的 ListView 构造方法,通过指定 scrollDirection 的值为水平方向,来覆盖默认的竖直方向。", contentType: "text" ),
22
+    ExtendContent.simple(content: img, contentType: "image" ),
23
+    ExtendContent.simple(content: "有时,你可能想要创建一个水平滑动(而不是竖直滑动)的列表。 ListView widget 本身就支持水平列表的创建。我们将会使用标准的 ListView 构造方法,通过指定 scrollDirection 的值为水平方向,来覆盖默认的竖直方向。", contentType: "text" ),
24
+    ExtendContent.simple(content: img, contentType: "image" ),
25
+  ];
26
+
27
+  return DefLayout(
28
+      head: Image.network(img, fit: BoxFit.cover),
19 29
       children: [
20
-        // 第一个组件用来撑满全屏
21
-        SizedBox(
22
-          width: width,
23
-          height: height,
24
-        ),
25
-        Positioned(
26
-          left: 0,
27
-          top: 0,
28
-          child: SizedBox(
29
-            height: _bannerHeight,
30
-            child: _banner(img),
31
-          ),
32
-        ),
33
-        Positioned(
34
-          left: 0,
35
-          top: _bannerHeight - _offset,
36
-          child: _content(context),
37
-        ),
38
-      ],
30
+        DefLayout.card(
31
+            top: DefLayout.headHeight - DefLayout.offset,
32
+            child: _content(context, list, handleClick),
33
+        )
34
+      ]
39 35
   );
40 36
 }
41 37
 
42
-Widget _banner(String imgUrl) {
43
-  return Image.network(imgUrl);
44
-}
45
-
46
-Widget _content(BuildContext context) {
38
+Widget _content(BuildContext context, List<ExtendContent> list, VoidCallback? handleClick) {
47 39
   final _border = 20.w;
48 40
   return Container(
49
-    width: MediaQuery.of(context).size.width,
50
-    padding: EdgeInsets.only(top: 45.w, left: 15.w, right: 15.w, bottom: 20.w),
41
+    padding: EdgeInsets.only(top: 40.w, left: 15.w, right: 15.w, bottom: 20.w),
51 42
     decoration: BoxDecoration(
52 43
       color: Colors.white,
53 44
         borderRadius: BorderRadius.vertical(top: Radius.circular(_border))
@@ -55,6 +46,32 @@ Widget _content(BuildContext context) {
55 46
     child: Column(
56 47
       children: [
57 48
         summary(),
49
+        _sectionHead('农机详情'),
50
+        ExtendContentList(list: list),
51
+        SizedBox(height: 20.w,),
52
+        RoundButton(text: "预约", onPressed: handleClick,)
53
+      ],
54
+    ),
55
+  );
56
+}
57
+
58
+Widget _sectionHead(String title) {
59
+  Widget img = SizedBox(
60
+    width: 16.w,
61
+    height: 16.w,
62
+    child: Image.asset('images/decorate.png'),
63
+  );
64
+
65
+  return Container(
66
+    padding: EdgeInsets.fromLTRB(0, 20.w, 0, 20.w),
67
+    child: Row(
68
+      mainAxisAlignment: MainAxisAlignment.center,
69
+      children: [
70
+        img,
71
+        SizedBox(width: 20.w),
72
+        Text(title, style: TextStyle(fontSize: 16.sp, color: const Color(0xFF222222), fontWeight: FontWeight.w500),),
73
+        SizedBox(width: 20.w),
74
+        img,
58 75
       ],
59 76
     ),
60 77
   );

+ 8
- 1
lib/pages/machinery/map/index.dart Vedi File

@@ -16,7 +16,14 @@ class MachineryMapPage extends StatelessWidget {
16 16
   @override
17 17
   Widget build(BuildContext context) {
18 18
     final appBar = AppBar(title: Obx(() => Text(title.value)), centerTitle: true,);
19
-    return Scaffold(appBar: appBar, body: page(context: context, appbarSize: appBar.preferredSize, handleClick: handleClick),);
19
+    return Scaffold(
20
+      appBar: appBar,
21
+      body: SafeArea(
22
+        child: SingleChildScrollView (
23
+          child: page(context: context, handleClick: handleClick),
24
+        ),
25
+      )
26
+    );
20 27
   }
21 28
   
22 29
 }

+ 25
- 77
lib/pages/machinery/map/widgets/detail.dart Vedi File

@@ -1,4 +1,6 @@
1 1
 
2
+import 'package:farmer_client/pages/machinery/widgets/DefLayout.dart';
3
+import 'package:farmer_client/pages/machinery/widgets/RoundButton.dart';
2 4
 import 'package:flutter/material.dart';
3 5
 import 'package:flutter/widgets.dart';
4 6
 import 'package:flutter_screenutil/flutter_screenutil.dart';
@@ -7,92 +9,38 @@ import 'package:farmer_client/widgets/amap/amap.dart';
7 9
 
8 10
 import '../../widgets/summary.dart';
9 11
 
10
-Widget page({ required BuildContext context, required Size appbarSize, required void Function() handleClick}) {
12
+Widget page({ required BuildContext context, VoidCallback? handleClick}) {
11 13
   final _offset = 20.w;
12 14
   final width = MediaQuery.of(context).size.width;
13
-  final height = MediaQuery.of(context).size.height
14
-      - appbarSize.height
15
-      - MediaQuery.of(context).padding.top;
16
-  final mapHeight = height * 0.3;
17
-  final cardHeight = (height - mapHeight) / 2 + _offset;
15
+  final mapHeight = 226.5.w;
16
+  final cardHeight = 250.w;
18 17
 
19 18
 
20 19
   final img = 'https://yz-websit.oss-cn-hangzhou.aliyuncs.com/xlk/index-icon19.jpg';
21 20
   final LatLng position = LatLng(32.690712, 112.091892);
22 21
 
23
-  return Stack(
24
-    alignment: Alignment.topCenter,
25
-    children: [
26
-      // 第一个组件用来撑满全屏
27
-      SizedBox(
28
-        width: width,
29
-        height: height,
30
-      ),
31
-      SizedBox(
32
-        width: width,
33
-        height: mapHeight,
34
-        child: AMap(position: position),
35
-      ),
36
-      Positioned(
37
-        left: 0,
38
-        top: mapHeight - _offset,
39
-        height: cardHeight,
40
-        child: _thumb(context, img),
41
-      ),
42
-      Positioned(
43
-        left: 0,
44
-        top: mapHeight + cardHeight - 2 * _offset,
45
-        height: cardHeight,
46
-        child: _content(context, handleClick),
47
-      ),
48
-    ],);
49
-}
50
-
51
-Widget _card(BuildContext context, Widget child) {
52
-  final _border = 20.w;
53
-  return Container(
54
-    width: MediaQuery.of(context).size.width,
55
-    clipBehavior: Clip.hardEdge,
56
-    decoration: BoxDecoration(
57
-        borderRadius: BorderRadius.vertical(top: Radius.circular(_border))
58
-    ),
59
-    child: child,
22
+  return DefLayout(
23
+      head: AMap(position: position),
24
+      children: [
25
+        DefLayout.card(
26
+            top: DefLayout.headHeight - DefLayout.offset,
27
+            height: DefLayout.headHeight,
28
+            child: Image.network(img, fit: BoxFit.cover)
29
+        ),
30
+        DefLayout.card(
31
+            top: (DefLayout.headHeight - DefLayout.offset) * 2,
32
+            padding: EdgeInsets.only(top: 45.w, left: 15.w, right: 15.w, bottom: 20.w),
33
+            child: _content(context, handleClick)
34
+        ),
35
+      ]
60 36
   );
61 37
 }
62 38
 
63
-Widget _thumb(BuildContext context, String imgUrl) {
64
-  return _card(context, Image.network(imgUrl, fit: BoxFit.cover));
65
-}
66
-
67
-
68
-Widget _button(void Function() handleClick) {
69
-  return ElevatedButton(
70
-    child: const Text("预约"),
71
-    style: ElevatedButton.styleFrom(
72
-        primary: const Color(0xFFFF703B),
73
-        textStyle: TextStyle(color: Colors.white, fontSize: 20.sp, letterSpacing: 5.sp),
74
-        elevation: 0,
75
-        minimumSize: Size(double.infinity, 49.w),
76
-        shape: RoundedRectangleBorder(
77
-          borderRadius: BorderRadius.all(Radius.circular(24.5.w)),
78
-        )
79
-    ),
80
-    onPressed: handleClick,
39
+Widget _content(BuildContext context, VoidCallback? handleClick) {
40
+  return Column(
41
+    children: [
42
+      summary(),
43
+      RoundButton(text: "预约", onPressed: handleClick,),
44
+    ],
81 45
   );
82
-}
83
-
84
-Widget _content(BuildContext context, void Function() handleClick) {
85
-  return _card(context, Container(
86
-    padding: EdgeInsets.only(top: 45.w, left: 15.w, right: 15.w, bottom: 20.w),
87
-    decoration: const BoxDecoration(
88
-      color: Colors.white,
89
-    ),
90
-    child: Column(
91
-
92
-      children: [
93
-        summary(),
94
-        _button(handleClick),
95
-      ],
96
-    ),
97
-  ));
98 46
 }

+ 44
- 0
lib/pages/machinery/widgets/DefLayout.dart Vedi File

@@ -0,0 +1,44 @@
1
+
2
+import 'package:flutter/material.dart';
3
+import 'package:flutter_screenutil/flutter_screenutil.dart';
4
+
5
+class DefLayout extends StatelessWidget {
6
+  Widget head;
7
+  List<Widget> children;
8
+
9
+  DefLayout({Key? key, required this.head, required this.children}): super(key: key);
10
+
11
+  static double headHeight = 250.w;
12
+  static double offset = 20.w;
13
+
14
+  static Widget card({required double top, required Widget child, double? height, EdgeInsetsGeometry? padding}) {
15
+    final _border = 20.w;
16
+    return Container(
17
+      margin: EdgeInsets.only(top: top),
18
+      padding: padding,
19
+      height: height,
20
+      clipBehavior: Clip.hardEdge,
21
+      decoration: BoxDecoration(
22
+          color: Colors.white,
23
+          borderRadius: BorderRadius.vertical(top: Radius.circular(_border))
24
+      ),
25
+      child: child,
26
+    );
27
+  }
28
+
29
+  @override
30
+  Widget build(BuildContext context) {
31
+    final width = MediaQuery.of(context).size.width;
32
+
33
+    return Stack(
34
+      children: [
35
+        SizedBox(
36
+          width: width,
37
+          height: headHeight,
38
+          child: head,
39
+        ),
40
+        ...children,
41
+      ],
42
+    );
43
+  }
44
+}

+ 30
- 0
lib/pages/machinery/widgets/RoundButton.dart Vedi File

@@ -0,0 +1,30 @@
1
+
2
+import 'package:flutter/material.dart';
3
+import 'package:flutter_screenutil/flutter_screenutil.dart';
4
+
5
+class RoundButton extends StatelessWidget {
6
+
7
+  String text;
8
+  VoidCallback? onPressed;
9
+
10
+  RoundButton({Key? key, this.onPressed, required this.text}): super(key: key);
11
+
12
+  @override
13
+  Widget build(BuildContext context) {
14
+
15
+    return ElevatedButton(
16
+      child: Text(text),
17
+      style: ElevatedButton.styleFrom(
18
+          primary: const Color(0xFFFF703B),
19
+          textStyle: TextStyle(color: Colors.white, fontSize: 20.sp, letterSpacing: 5.sp),
20
+          elevation: 0,
21
+          minimumSize: Size(double.infinity, 49.w),
22
+          shape: RoundedRectangleBorder(
23
+            borderRadius: BorderRadius.all(Radius.circular(24.5.w)),
24
+          )
25
+      ),
26
+      onPressed: onPressed,
27
+    );
28
+  }
29
+
30
+}

+ 3
- 7
lib/pages/machinery/widgets/summary.dart Vedi File

@@ -23,7 +23,7 @@ Widget _title() {
23 23
       Expanded(
24 24
           child: Text("收割机001--S001",
25 25
               style: TextStyle(
26
-                color: Color(0xFF222222),
26
+                color: const Color(0xFF222222),
27 27
                 fontSize: 18.sp,
28 28
                 fontWeight: FontWeight.bold,
29 29
               )),
@@ -60,10 +60,6 @@ Widget _title() {
60 60
                 ]
61 61
             ),
62 62
           ),
63
-
64
-
65
-
66
-
67 63
         ),
68 64
       )
69 65
     ],
@@ -76,7 +72,7 @@ Widget _desc() {
76 72
       Icon(Icons.location_on_outlined, size: 16.sp,),
77 73
       Expanded(
78 74
         flex: 1,
79
-        child: Text("距离当前位置2.3公里 >>", style: TextStyle(color: Color(0xFF222222), fontSize: 15.sp),),
75
+        child: Text("距离当前位置2.3公里 >>", style: TextStyle(color: const Color(0xFF222222), fontSize: 15.sp),),
80 76
       ),
81 77
     ],
82 78
   );
@@ -85,6 +81,6 @@ Widget _desc() {
85 81
 Widget _detail() {
86 82
   return Container(
87 83
     alignment: Alignment.centerLeft,
88
-    child: Text("农机手1的收割机", style: TextStyle(color: Color(0xFF222222), fontSize: 15.sp),),
84
+    child: Text("农机手1的收割机", style: TextStyle(color: const Color(0xFF222222), fontSize: 15.sp),),
89 85
   );
90 86
 }

+ 1
- 0
lib/routes/pages.dart Vedi File

@@ -18,6 +18,7 @@ List<GetPage> pages = [
18 18
   GetPage(name: '/addAddress', page: () =>  AddAddress()),
19 19
   GetPage(name: '/userInfo', page: () =>  UserInfo()),
20 20
   GetPage(name: '/machineryMap', page: () =>  MachineryMapPage()),
21
+  GetPage(name: '/machineryDetail', page: () =>  MachineryDetailPage()),
21 22
   GetPage(name: '/aboutUs', page: () =>  AboutUs()),
22 23
   GetPage(name: '/agreement', page: () =>  Agreement()),
23 24
 ];

+ 41
- 0
lib/widgets/ExtendContentList.dart Vedi File

@@ -0,0 +1,41 @@
1
+
2
+import 'package:flutter/widgets.dart';
3
+import 'package:flutter_screenutil/flutter_screenutil.dart';
4
+
5
+import '../models/entities/ExtendContent.dart';
6
+
7
+class ExtendContentList extends StatelessWidget {
8
+  final List<ExtendContent> list;
9
+
10
+  ExtendContentList({ Key? key, required this.list }) : super(key: key);
11
+  
12
+  Widget? _image(String? content) {
13
+    if (null == content || content.isEmpty) return null;
14
+    return Image.network(content, fit: BoxFit.cover);
15
+  }
16
+
17
+  Widget? _text(String? content) {
18
+    if (null == content || content.isEmpty) return null;
19
+    return Text(content);
20
+  }
21
+
22
+  @override
23
+  Widget build(BuildContext context) {
24
+
25
+    List<Widget> _widgets = [];
26
+    for (var i = 0; i < list.length; i += 1) {
27
+      if (i != 0 ) {
28
+        _widgets.add(SizedBox(height: 20.w,));
29
+      }
30
+      var item = list[i];
31
+      _widgets.add(Container(
32
+        child: item.contentType == "image" ? _image(item.content) : _text(item.content),
33
+      ));
34
+    }
35
+
36
+    return Column(
37
+      children: _widgets,
38
+    );
39
+  }
40
+
41
+}

+ 72
- 72
pubspec.lock Vedi File

@@ -5,161 +5,161 @@ packages:
5 5
     dependency: transitive
6 6
     description:
7 7
       name: _fe_analyzer_shared
8
-      url: "https://pub.dartlang.org"
8
+      url: "https://pub.flutter-io.cn"
9 9
     source: hosted
10 10
     version: "39.0.0"
11 11
   amap_flutter_base:
12 12
     dependency: transitive
13 13
     description:
14 14
       name: amap_flutter_base
15
-      url: "https://pub.dartlang.org"
15
+      url: "https://pub.flutter-io.cn"
16 16
     source: hosted
17 17
     version: "3.0.0"
18 18
   amap_flutter_map:
19 19
     dependency: "direct main"
20 20
     description:
21 21
       name: amap_flutter_map
22
-      url: "https://pub.dartlang.org"
22
+      url: "https://pub.flutter-io.cn"
23 23
     source: hosted
24 24
     version: "3.0.0"
25 25
   analyzer:
26 26
     dependency: transitive
27 27
     description:
28 28
       name: analyzer
29
-      url: "https://pub.dartlang.org"
29
+      url: "https://pub.flutter-io.cn"
30 30
     source: hosted
31 31
     version: "4.0.0"
32 32
   args:
33 33
     dependency: transitive
34 34
     description:
35 35
       name: args
36
-      url: "https://pub.dartlang.org"
36
+      url: "https://pub.flutter-io.cn"
37 37
     source: hosted
38 38
     version: "2.3.0"
39 39
   async:
40 40
     dependency: transitive
41 41
     description:
42 42
       name: async
43
-      url: "https://pub.dartlang.org"
43
+      url: "https://pub.flutter-io.cn"
44 44
     source: hosted
45 45
     version: "2.8.2"
46 46
   boolean_selector:
47 47
     dependency: transitive
48 48
     description:
49 49
       name: boolean_selector
50
-      url: "https://pub.dartlang.org"
50
+      url: "https://pub.flutter-io.cn"
51 51
     source: hosted
52 52
     version: "2.1.0"
53 53
   build:
54 54
     dependency: transitive
55 55
     description:
56 56
       name: build
57
-      url: "https://pub.dartlang.org"
57
+      url: "https://pub.flutter-io.cn"
58 58
     source: hosted
59 59
     version: "2.3.0"
60 60
   build_config:
61 61
     dependency: transitive
62 62
     description:
63 63
       name: build_config
64
-      url: "https://pub.dartlang.org"
64
+      url: "https://pub.flutter-io.cn"
65 65
     source: hosted
66 66
     version: "1.0.0"
67 67
   carousel_slider:
68 68
     dependency: "direct main"
69 69
     description:
70 70
       name: carousel_slider
71
-      url: "https://pub.dartlang.org"
71
+      url: "https://pub.flutter-io.cn"
72 72
     source: hosted
73 73
     version: "4.0.0"
74 74
   characters:
75 75
     dependency: transitive
76 76
     description:
77 77
       name: characters
78
-      url: "https://pub.dartlang.org"
78
+      url: "https://pub.flutter-io.cn"
79 79
     source: hosted
80 80
     version: "1.2.0"
81 81
   charcode:
82 82
     dependency: transitive
83 83
     description:
84 84
       name: charcode
85
-      url: "https://pub.dartlang.org"
85
+      url: "https://pub.flutter-io.cn"
86 86
     source: hosted
87 87
     version: "1.3.1"
88 88
   checked_yaml:
89 89
     dependency: transitive
90 90
     description:
91 91
       name: checked_yaml
92
-      url: "https://pub.dartlang.org"
92
+      url: "https://pub.flutter-io.cn"
93 93
     source: hosted
94 94
     version: "2.0.1"
95 95
   clock:
96 96
     dependency: transitive
97 97
     description:
98 98
       name: clock
99
-      url: "https://pub.dartlang.org"
99
+      url: "https://pub.flutter-io.cn"
100 100
     source: hosted
101 101
     version: "1.1.0"
102 102
   collection:
103 103
     dependency: transitive
104 104
     description:
105 105
       name: collection
106
-      url: "https://pub.dartlang.org"
106
+      url: "https://pub.flutter-io.cn"
107 107
     source: hosted
108 108
     version: "1.15.0"
109 109
   convert:
110 110
     dependency: transitive
111 111
     description:
112 112
       name: convert
113
-      url: "https://pub.dartlang.org"
113
+      url: "https://pub.flutter-io.cn"
114 114
     source: hosted
115 115
     version: "3.0.1"
116 116
   crypto:
117 117
     dependency: transitive
118 118
     description:
119 119
       name: crypto
120
-      url: "https://pub.dartlang.org"
120
+      url: "https://pub.flutter-io.cn"
121 121
     source: hosted
122 122
     version: "3.0.1"
123 123
   cupertino_icons:
124 124
     dependency: "direct main"
125 125
     description:
126 126
       name: cupertino_icons
127
-      url: "https://pub.dartlang.org"
127
+      url: "https://pub.flutter-io.cn"
128 128
     source: hosted
129 129
     version: "1.0.4"
130 130
   dart_style:
131 131
     dependency: transitive
132 132
     description:
133 133
       name: dart_style
134
-      url: "https://pub.dartlang.org"
134
+      url: "https://pub.flutter-io.cn"
135 135
     source: hosted
136 136
     version: "2.2.3"
137 137
   dio:
138 138
     dependency: "direct main"
139 139
     description:
140 140
       name: dio
141
-      url: "https://pub.dartlang.org"
141
+      url: "https://pub.flutter-io.cn"
142 142
     source: hosted
143 143
     version: "4.0.6"
144 144
   fake_async:
145 145
     dependency: transitive
146 146
     description:
147 147
       name: fake_async
148
-      url: "https://pub.dartlang.org"
148
+      url: "https://pub.flutter-io.cn"
149 149
     source: hosted
150 150
     version: "1.2.0"
151 151
   ffi:
152 152
     dependency: transitive
153 153
     description:
154 154
       name: ffi
155
-      url: "https://pub.dartlang.org"
155
+      url: "https://pub.flutter-io.cn"
156 156
     source: hosted
157 157
     version: "1.1.2"
158 158
   file:
159 159
     dependency: transitive
160 160
     description:
161 161
       name: file
162
-      url: "https://pub.dartlang.org"
162
+      url: "https://pub.flutter-io.cn"
163 163
     source: hosted
164 164
     version: "6.1.2"
165 165
   flutter:
@@ -171,7 +171,7 @@ packages:
171 171
     dependency: "direct dev"
172 172
     description:
173 173
       name: flutter_lints
174
-      url: "https://pub.dartlang.org"
174
+      url: "https://pub.flutter-io.cn"
175 175
     source: hosted
176 176
     version: "1.0.4"
177 177
   flutter_localizations:
@@ -183,14 +183,14 @@ packages:
183 183
     dependency: transitive
184 184
     description:
185 185
       name: flutter_plugin_android_lifecycle
186
-      url: "https://pub.dartlang.org"
186
+      url: "https://pub.flutter-io.cn"
187 187
     source: hosted
188 188
     version: "2.0.5"
189 189
   flutter_screenutil:
190 190
     dependency: "direct main"
191 191
     description:
192 192
       name: flutter_screenutil
193
-      url: "https://pub.dartlang.org"
193
+      url: "https://pub.flutter-io.cn"
194 194
     source: hosted
195 195
     version: "5.4.0+1"
196 196
   flutter_test:
@@ -207,217 +207,217 @@ packages:
207 207
     dependency: "direct main"
208 208
     description:
209 209
       name: fluttertoast
210
-      url: "https://pub.dartlang.org"
210
+      url: "https://pub.flutter-io.cn"
211 211
     source: hosted
212 212
     version: "8.0.9"
213 213
   get:
214 214
     dependency: "direct main"
215 215
     description:
216 216
       name: get
217
-      url: "https://pub.dartlang.org"
217
+      url: "https://pub.flutter-io.cn"
218 218
     source: hosted
219 219
     version: "4.6.1"
220 220
   get_storage:
221 221
     dependency: "direct main"
222 222
     description:
223 223
       name: get_storage
224
-      url: "https://pub.dartlang.org"
224
+      url: "https://pub.flutter-io.cn"
225 225
     source: hosted
226 226
     version: "2.0.3"
227 227
   glob:
228 228
     dependency: transitive
229 229
     description:
230 230
       name: glob
231
-      url: "https://pub.dartlang.org"
231
+      url: "https://pub.flutter-io.cn"
232 232
     source: hosted
233 233
     version: "2.0.2"
234 234
   http_parser:
235 235
     dependency: transitive
236 236
     description:
237 237
       name: http_parser
238
-      url: "https://pub.dartlang.org"
238
+      url: "https://pub.flutter-io.cn"
239 239
     source: hosted
240 240
     version: "4.0.0"
241 241
   intl:
242 242
     dependency: transitive
243 243
     description:
244 244
       name: intl
245
-      url: "https://pub.dartlang.org"
245
+      url: "https://pub.flutter-io.cn"
246 246
     source: hosted
247 247
     version: "0.17.0"
248 248
   js:
249 249
     dependency: transitive
250 250
     description:
251 251
       name: js
252
-      url: "https://pub.dartlang.org"
252
+      url: "https://pub.flutter-io.cn"
253 253
     source: hosted
254 254
     version: "0.6.3"
255 255
   json_annotation:
256 256
     dependency: transitive
257 257
     description:
258 258
       name: json_annotation
259
-      url: "https://pub.dartlang.org"
259
+      url: "https://pub.flutter-io.cn"
260 260
     source: hosted
261 261
     version: "4.4.0"
262 262
   json_serializable:
263 263
     dependency: "direct main"
264 264
     description:
265 265
       name: json_serializable
266
-      url: "https://pub.dartlang.org"
266
+      url: "https://pub.flutter-io.cn"
267 267
     source: hosted
268 268
     version: "6.1.6"
269 269
   lints:
270 270
     dependency: transitive
271 271
     description:
272 272
       name: lints
273
-      url: "https://pub.dartlang.org"
273
+      url: "https://pub.flutter-io.cn"
274 274
     source: hosted
275 275
     version: "1.0.1"
276 276
   location:
277 277
     dependency: "direct main"
278 278
     description:
279 279
       name: location
280
-      url: "https://pub.dartlang.org"
280
+      url: "https://pub.flutter-io.cn"
281 281
     source: hosted
282 282
     version: "4.3.0"
283 283
   location_platform_interface:
284 284
     dependency: transitive
285 285
     description:
286 286
       name: location_platform_interface
287
-      url: "https://pub.dartlang.org"
287
+      url: "https://pub.flutter-io.cn"
288 288
     source: hosted
289 289
     version: "2.3.0"
290 290
   location_web:
291 291
     dependency: transitive
292 292
     description:
293 293
       name: location_web
294
-      url: "https://pub.dartlang.org"
294
+      url: "https://pub.flutter-io.cn"
295 295
     source: hosted
296 296
     version: "3.1.1"
297 297
   logging:
298 298
     dependency: transitive
299 299
     description:
300 300
       name: logging
301
-      url: "https://pub.dartlang.org"
301
+      url: "https://pub.flutter-io.cn"
302 302
     source: hosted
303 303
     version: "1.0.2"
304 304
   matcher:
305 305
     dependency: transitive
306 306
     description:
307 307
       name: matcher
308
-      url: "https://pub.dartlang.org"
308
+      url: "https://pub.flutter-io.cn"
309 309
     source: hosted
310 310
     version: "0.12.11"
311 311
   material_color_utilities:
312 312
     dependency: transitive
313 313
     description:
314 314
       name: material_color_utilities
315
-      url: "https://pub.dartlang.org"
315
+      url: "https://pub.flutter-io.cn"
316 316
     source: hosted
317 317
     version: "0.1.3"
318 318
   meta:
319 319
     dependency: transitive
320 320
     description:
321 321
       name: meta
322
-      url: "https://pub.dartlang.org"
322
+      url: "https://pub.flutter-io.cn"
323 323
     source: hosted
324 324
     version: "1.7.0"
325 325
   package_config:
326 326
     dependency: transitive
327 327
     description:
328 328
       name: package_config
329
-      url: "https://pub.dartlang.org"
329
+      url: "https://pub.flutter-io.cn"
330 330
     source: hosted
331 331
     version: "2.0.2"
332 332
   path:
333 333
     dependency: transitive
334 334
     description:
335 335
       name: path
336
-      url: "https://pub.dartlang.org"
336
+      url: "https://pub.flutter-io.cn"
337 337
     source: hosted
338 338
     version: "1.8.0"
339 339
   path_provider:
340 340
     dependency: transitive
341 341
     description:
342 342
       name: path_provider
343
-      url: "https://pub.dartlang.org"
343
+      url: "https://pub.flutter-io.cn"
344 344
     source: hosted
345 345
     version: "2.0.9"
346 346
   path_provider_android:
347 347
     dependency: transitive
348 348
     description:
349 349
       name: path_provider_android
350
-      url: "https://pub.dartlang.org"
350
+      url: "https://pub.flutter-io.cn"
351 351
     source: hosted
352 352
     version: "2.0.12"
353 353
   path_provider_ios:
354 354
     dependency: transitive
355 355
     description:
356 356
       name: path_provider_ios
357
-      url: "https://pub.dartlang.org"
357
+      url: "https://pub.flutter-io.cn"
358 358
     source: hosted
359 359
     version: "2.0.8"
360 360
   path_provider_linux:
361 361
     dependency: transitive
362 362
     description:
363 363
       name: path_provider_linux
364
-      url: "https://pub.dartlang.org"
364
+      url: "https://pub.flutter-io.cn"
365 365
     source: hosted
366 366
     version: "2.1.5"
367 367
   path_provider_macos:
368 368
     dependency: transitive
369 369
     description:
370 370
       name: path_provider_macos
371
-      url: "https://pub.dartlang.org"
371
+      url: "https://pub.flutter-io.cn"
372 372
     source: hosted
373 373
     version: "2.0.5"
374 374
   path_provider_platform_interface:
375 375
     dependency: transitive
376 376
     description:
377 377
       name: path_provider_platform_interface
378
-      url: "https://pub.dartlang.org"
378
+      url: "https://pub.flutter-io.cn"
379 379
     source: hosted
380 380
     version: "2.0.3"
381 381
   path_provider_windows:
382 382
     dependency: transitive
383 383
     description:
384 384
       name: path_provider_windows
385
-      url: "https://pub.dartlang.org"
385
+      url: "https://pub.flutter-io.cn"
386 386
     source: hosted
387 387
     version: "2.0.5"
388 388
   platform:
389 389
     dependency: transitive
390 390
     description:
391 391
       name: platform
392
-      url: "https://pub.dartlang.org"
392
+      url: "https://pub.flutter-io.cn"
393 393
     source: hosted
394 394
     version: "3.1.0"
395 395
   plugin_platform_interface:
396 396
     dependency: transitive
397 397
     description:
398 398
       name: plugin_platform_interface
399
-      url: "https://pub.dartlang.org"
399
+      url: "https://pub.flutter-io.cn"
400 400
     source: hosted
401 401
     version: "2.1.2"
402 402
   process:
403 403
     dependency: transitive
404 404
     description:
405 405
       name: process
406
-      url: "https://pub.dartlang.org"
406
+      url: "https://pub.flutter-io.cn"
407 407
     source: hosted
408 408
     version: "4.2.4"
409 409
   pub_semver:
410 410
     dependency: transitive
411 411
     description:
412 412
       name: pub_semver
413
-      url: "https://pub.dartlang.org"
413
+      url: "https://pub.flutter-io.cn"
414 414
     source: hosted
415 415
     version: "2.1.1"
416 416
   pubspec_parse:
417 417
     dependency: transitive
418 418
     description:
419 419
       name: pubspec_parse
420
-      url: "https://pub.dartlang.org"
420
+      url: "https://pub.flutter-io.cn"
421 421
     source: hosted
422 422
     version: "1.2.0"
423 423
   sky_engine:
@@ -429,105 +429,105 @@ packages:
429 429
     dependency: transitive
430 430
     description:
431 431
       name: source_gen
432
-      url: "https://pub.dartlang.org"
432
+      url: "https://pub.flutter-io.cn"
433 433
     source: hosted
434 434
     version: "1.2.2"
435 435
   source_helper:
436 436
     dependency: transitive
437 437
     description:
438 438
       name: source_helper
439
-      url: "https://pub.dartlang.org"
439
+      url: "https://pub.flutter-io.cn"
440 440
     source: hosted
441 441
     version: "1.3.2"
442 442
   source_span:
443 443
     dependency: transitive
444 444
     description:
445 445
       name: source_span
446
-      url: "https://pub.dartlang.org"
446
+      url: "https://pub.flutter-io.cn"
447 447
     source: hosted
448 448
     version: "1.8.1"
449 449
   stack_trace:
450 450
     dependency: transitive
451 451
     description:
452 452
       name: stack_trace
453
-      url: "https://pub.dartlang.org"
453
+      url: "https://pub.flutter-io.cn"
454 454
     source: hosted
455 455
     version: "1.10.0"
456 456
   stream_channel:
457 457
     dependency: transitive
458 458
     description:
459 459
       name: stream_channel
460
-      url: "https://pub.dartlang.org"
460
+      url: "https://pub.flutter-io.cn"
461 461
     source: hosted
462 462
     version: "2.1.0"
463 463
   stream_transform:
464 464
     dependency: transitive
465 465
     description:
466 466
       name: stream_transform
467
-      url: "https://pub.dartlang.org"
467
+      url: "https://pub.flutter-io.cn"
468 468
     source: hosted
469 469
     version: "2.0.0"
470 470
   string_scanner:
471 471
     dependency: transitive
472 472
     description:
473 473
       name: string_scanner
474
-      url: "https://pub.dartlang.org"
474
+      url: "https://pub.flutter-io.cn"
475 475
     source: hosted
476 476
     version: "1.1.0"
477 477
   term_glyph:
478 478
     dependency: transitive
479 479
     description:
480 480
       name: term_glyph
481
-      url: "https://pub.dartlang.org"
481
+      url: "https://pub.flutter-io.cn"
482 482
     source: hosted
483 483
     version: "1.2.0"
484 484
   test_api:
485 485
     dependency: transitive
486 486
     description:
487 487
       name: test_api
488
-      url: "https://pub.dartlang.org"
488
+      url: "https://pub.flutter-io.cn"
489 489
     source: hosted
490 490
     version: "0.4.8"
491 491
   typed_data:
492 492
     dependency: transitive
493 493
     description:
494 494
       name: typed_data
495
-      url: "https://pub.dartlang.org"
495
+      url: "https://pub.flutter-io.cn"
496 496
     source: hosted
497 497
     version: "1.3.0"
498 498
   vector_math:
499 499
     dependency: transitive
500 500
     description:
501 501
       name: vector_math
502
-      url: "https://pub.dartlang.org"
502
+      url: "https://pub.flutter-io.cn"
503 503
     source: hosted
504 504
     version: "2.1.1"
505 505
   watcher:
506 506
     dependency: transitive
507 507
     description:
508 508
       name: watcher
509
-      url: "https://pub.dartlang.org"
509
+      url: "https://pub.flutter-io.cn"
510 510
     source: hosted
511 511
     version: "1.0.1"
512 512
   win32:
513 513
     dependency: transitive
514 514
     description:
515 515
       name: win32
516
-      url: "https://pub.dartlang.org"
516
+      url: "https://pub.flutter-io.cn"
517 517
     source: hosted
518 518
     version: "2.5.1"
519 519
   xdg_directories:
520 520
     dependency: transitive
521 521
     description:
522 522
       name: xdg_directories
523
-      url: "https://pub.dartlang.org"
523
+      url: "https://pub.flutter-io.cn"
524 524
     source: hosted
525 525
     version: "0.2.0+1"
526 526
   yaml:
527 527
     dependency: transitive
528 528
     description:
529 529
       name: yaml
530
-      url: "https://pub.dartlang.org"
530
+      url: "https://pub.flutter-io.cn"
531 531
     source: hosted
532 532
     version: "3.1.0"
533 533
 sdks: