张延森 3 gadus atpakaļ
vecāks
revīzija
9c7eb8c4ac

+ 5
- 1
android/app/build.gradle Parādīt failu

35
 
35
 
36
     defaultConfig {
36
     defaultConfig {
37
         // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
37
         // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
38
-        applicationId "com.example.farmer_client"
38
+        applicationId "com.njyunzhi.farmer_client"
39
         minSdkVersion flutter.minSdkVersion
39
         minSdkVersion flutter.minSdkVersion
40
         targetSdkVersion flutter.targetSdkVersion
40
         targetSdkVersion flutter.targetSdkVersion
41
         versionCode flutterVersionCode.toInteger()
41
         versionCode flutterVersionCode.toInteger()
65
             // TODO: Add your own signing config for the release build.
65
             // TODO: Add your own signing config for the release build.
66
             // Signing with the debug keys for now, so `flutter run --release` works.
66
             // Signing with the debug keys for now, so `flutter run --release` works.
67
             signingConfig signingConfigs.debug
67
             signingConfig signingConfigs.debug
68
+
69
+            //关闭混淆, 否则在运行release包后可能出现运行崩溃, TODO后续进行混淆配置
70
+            minifyEnabled false //删除无用代码
71
+            shrinkResources false //删除无用资源
68
         }
72
         }
69
     }
73
     }
70
 }
74
 }

+ 1
- 1
android/app/src/debug/AndroidManifest.xml Parādīt failu

1
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
1
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
2
-    package="com.example.farmer_client">
2
+    package="com.njyunzhi.farmer_client">
3
     <!-- Flutter needs it to communicate with the running application
3
     <!-- Flutter needs it to communicate with the running application
4
          to allow setting breakpoints, to provide hot reload, etc.
4
          to allow setting breakpoints, to provide hot reload, etc.
5
     -->
5
     -->

+ 1
- 1
android/app/src/main/AndroidManifest.xml Parādīt failu

1
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
1
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
2
     xmlns:tools="http://schemas.android.com/tools"
2
     xmlns:tools="http://schemas.android.com/tools"
3
-    package="com.example.farmer_client">
3
+    package="com.njyunzhi.farmer_client">
4
     <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
4
     <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
5
     <!--允许获取精确位置,精准定位必选-->
5
     <!--允许获取精确位置,精准定位必选-->
6
     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
6
     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

android/app/src/main/java/com/example/farmer_client/MainActivity.java → android/app/src/main/java/com/njyunzhi/farmer_client/MainActivity.java Parādīt failu

1
-package com.example.farmer_client;
1
+package com.njyunzhi.farmer_client;
2
 
2
 
3
 import io.flutter.embedding.android.FlutterActivity;
3
 import io.flutter.embedding.android.FlutterActivity;
4
 
4
 

+ 1
- 1
android/app/src/profile/AndroidManifest.xml Parādīt failu

1
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
1
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
2
-    package="com.example.farmer_client">
2
+    package="com.njyunzhi.farmer_client">
3
     <!-- Flutter needs it to communicate with the running application
3
     <!-- Flutter needs it to communicate with the running application
4
          to allow setting breakpoints, to provide hot reload, etc.
4
          to allow setting breakpoints, to provide hot reload, etc.
5
     -->
5
     -->

+ 3
- 3
ios/Runner.xcodeproj/project.pbxproj Parādīt failu

294
 					"$(inherited)",
294
 					"$(inherited)",
295
 					"@executable_path/Frameworks",
295
 					"@executable_path/Frameworks",
296
 				);
296
 				);
297
-				PRODUCT_BUNDLE_IDENTIFIER = com.example.farmerClient;
297
+				PRODUCT_BUNDLE_IDENTIFIER = com.njyunzhi.farmerClient;
298
 				PRODUCT_NAME = "$(TARGET_NAME)";
298
 				PRODUCT_NAME = "$(TARGET_NAME)";
299
 				SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
299
 				SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
300
 				SWIFT_VERSION = 5.0;
300
 				SWIFT_VERSION = 5.0;
422
 					"$(inherited)",
422
 					"$(inherited)",
423
 					"@executable_path/Frameworks",
423
 					"@executable_path/Frameworks",
424
 				);
424
 				);
425
-				PRODUCT_BUNDLE_IDENTIFIER = com.example.farmerClient;
425
+				PRODUCT_BUNDLE_IDENTIFIER = com.njyunzhi.farmerClient;
426
 				PRODUCT_NAME = "$(TARGET_NAME)";
426
 				PRODUCT_NAME = "$(TARGET_NAME)";
427
 				SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
427
 				SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
428
 				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
428
 				SWIFT_OPTIMIZATION_LEVEL = "-Onone";
444
 					"$(inherited)",
444
 					"$(inherited)",
445
 					"@executable_path/Frameworks",
445
 					"@executable_path/Frameworks",
446
 				);
446
 				);
447
-				PRODUCT_BUNDLE_IDENTIFIER = com.example.farmerClient;
447
+				PRODUCT_BUNDLE_IDENTIFIER = com.njyunzhi.farmerClient;
448
 				PRODUCT_NAME = "$(TARGET_NAME)";
448
 				PRODUCT_NAME = "$(TARGET_NAME)";
449
 				SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
449
 				SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
450
 				SWIFT_VERSION = 5.0;
450
 				SWIFT_VERSION = 5.0;

+ 12
- 0
lib/pages/home/index.dart Parādīt failu

1
+import 'package:farmer_client/widgets/Modal.dart' as modal;
1
 import 'package:farmer_client/widgets/layout/BasicPage.dart';
2
 import 'package:farmer_client/widgets/layout/BasicPage.dart';
2
 import 'package:flutter/material.dart';
3
 import 'package:flutter/material.dart';
4
+import 'package:get/get.dart';
5
+import '../../utils/timer.dart';
3
 import './widgets/home/index.dart';
6
 import './widgets/home/index.dart';
4
 
7
 
5
 
8
 
11
 
14
 
12
   @override
15
   @override
13
   Widget builder(BuildContext context) {
16
   Widget builder(BuildContext context) {
17
+
18
+    setTimeout(() {
19
+      // showDialog(context: Get.overlayContext!, builder: (BuildContext c) {
20
+      //   return Modal(type: 'dialog', title: '测试', message: '这是一段 message !', onConfirm: () => print('hahahaha'),);
21
+      // } );
22
+      // Get.dialog(Modal(type: 'dialog', title: '测试', message: '这是一段 message !', onConfirm: () => print('hahahaha'),));
23
+      modal.showDialog(title: '测试', content: SizedBox(width: 300, height: 300,), onConfirm: () => false);
24
+    }, 2000);
25
+    
14
     return const HomePage();
26
     return const HomePage();
15
   }
27
   }
16
 }
28
 }

+ 8
- 2
lib/utils/timer.dart Parādīt failu

6
   return Timer.periodic(duration, f);
6
   return Timer.periodic(duration, f);
7
 }
7
 }
8
 
8
 
9
-Timer setTimeout(void Function () f, int milliseconds) {
9
+void setTimeout(void Function () f, int milliseconds) {
10
   var duration = Duration(milliseconds: milliseconds);
10
   var duration = Duration(milliseconds: milliseconds);
11
-  return Timer(duration, f);
11
+  Timer? t = null;
12
+  t = Timer(duration, () {
13
+    if (null != t) {
14
+      t.cancel();
15
+    }
16
+    f();
17
+  });
12
 }
18
 }

+ 105
- 26
lib/widgets/Modal.dart Parādīt failu

1
 
1
 
2
+import 'package:flutter/cupertino.dart';
2
 import 'package:flutter/material.dart';
3
 import 'package:flutter/material.dart';
3
 import 'package:flutter/widgets.dart';
4
 import 'package:flutter/widgets.dart';
4
 import 'package:flutter_screenutil/flutter_screenutil.dart';
5
 import 'package:flutter_screenutil/flutter_screenutil.dart';
6
+import 'package:get/get.dart';
5
 
7
 
6
-class Dialog extends StatelessWidget {
8
+typedef ModalFunc = dynamic Function();
9
+
10
+/// func 函数如果返回 bool 值, 则只有 true 的情况下才默认关闭弹窗
11
+/// 如果返回 Future , 则只有正常结束的时候 才关闭弹窗
12
+/// 其余情况, 都默认关闭弹窗
13
+void _handleFunc(ModalFunc? func) {
14
+  if (null != func) {
15
+    dynamic res = func();
16
+    if (res.runtimeType == bool) {
17
+      if (res) {
18
+        Get.back(closeOverlays: true);
19
+      }
20
+    } else if (res is Future) {
21
+      res.then((_) => Get.back(closeOverlays: true));
22
+    } else {
23
+      Get.back(closeOverlays: true);
24
+    }
25
+  } else {
26
+    Get.back(closeOverlays: true);
27
+  }
28
+}
29
+
30
+/// 打开一个 dialog
31
+void showDialog({ required String title, String? message, Widget? content, ModalFunc? onConfirm, ModalFunc? onCancel }) {
32
+  Get.dialog(
33
+    Modal(
34
+      type: 'dialog',
35
+      title: title,
36
+      message: message,
37
+      content: content,
38
+      onConfirm: () => _handleFunc(onConfirm),
39
+      onCancel: () => _handleFunc(onCancel),
40
+    )
41
+  );
42
+}
43
+
44
+/// 打开一个 alert
45
+void showAlert({ required String title, String? message, Widget? content, ModalFunc? onConfirm }) {
46
+  Get.dialog(
47
+      Modal(
48
+        type: 'alert',
49
+        title: title,
50
+        message: message,
51
+        content: content,
52
+        onConfirm: () => _handleFunc(onConfirm),
53
+      )
54
+  );
55
+}
56
+
57
+class Modal extends StatelessWidget {
7
 
58
 
8
   String title;
59
   String title;
9
   String type;
60
   String type;
12
   VoidCallback? onConfirm;
63
   VoidCallback? onConfirm;
13
   VoidCallback? onCancel;
64
   VoidCallback? onCancel;
14
 
65
 
15
-  Dialog({Key? key,
66
+  final _titleStyle = TextStyle(color: const Color(0xFF222222), fontSize: 20.sp, fontWeight: FontWeight.bold);
67
+  final _messageStyle = TextStyle(color: const Color(0xFF666666), fontSize: 18.sp);
68
+  final _primaryColor = const Color(0xFFFF703B);
69
+  final _btnSize = Size(90.w, 36.w);
70
+  final _btnShape = RoundedRectangleBorder(
71
+    side: const BorderSide(color: Color(0xFFFF703B), width: 2.0),
72
+    borderRadius: BorderRadius.all(Radius.circular(24.5.w)),
73
+  );
74
+
75
+  void _handleConfirm() {
76
+    if (null != onConfirm) {
77
+      onConfirm!();
78
+    }
79
+  }
80
+  void _handleCancel() {
81
+    if (null != onCancel) {
82
+      onCancel!();
83
+    }
84
+  }
85
+
86
+  Modal({Key? key,
16
     this.type = 'alert',
87
     this.type = 'alert',
17
     required this.title,
88
     required this.title,
18
     this.message,
89
     this.message,
23
 
94
 
24
   Widget _confirmBtn() {
95
   Widget _confirmBtn() {
25
     return ElevatedButton(
96
     return ElevatedButton(
26
-      child: const Text("确定"),
97
+      child: Text("确定", style: TextStyle(color: Colors.white, fontSize: 18.sp, letterSpacing: 5.sp)),
27
       style: ElevatedButton.styleFrom(
98
       style: ElevatedButton.styleFrom(
28
-          primary: const Color(0xFFFF703B),
29
-          textStyle: TextStyle(color: Colors.white, fontSize: 20.sp, letterSpacing: 5.sp),
99
+          primary: _primaryColor,
30
           elevation: 0,
100
           elevation: 0,
31
-          minimumSize: Size(90.w, 49.w),
32
-          shape: RoundedRectangleBorder(
33
-            borderRadius: BorderRadius.all(Radius.circular(24.5.w)),
34
-          )
101
+          minimumSize: _btnSize,
102
+          shape: _btnShape,
35
       ),
103
       ),
36
-      onPressed: onConfirm,
104
+      onPressed: _handleConfirm,
37
     );
105
     );
38
   }
106
   }
39
 
107
 
40
   Widget _cancelBtn() {
108
   Widget _cancelBtn() {
41
     return ElevatedButton(
109
     return ElevatedButton(
42
-      child: const Text("取消"),
110
+      child: Text("取消", style: TextStyle(color: _primaryColor, fontSize: 18.sp, letterSpacing: 5.sp)),
43
       style: ElevatedButton.styleFrom(
111
       style: ElevatedButton.styleFrom(
44
-        primary: Colors.transparent,
45
-        textStyle: TextStyle(color: const Color(0xFFFF703B), fontSize: 20.sp, letterSpacing: 5.sp),
112
+        primary: Colors.white,
46
         elevation: 0,
113
         elevation: 0,
47
-        minimumSize: Size(90.w, 49.w),
48
-        shape: RoundedRectangleBorder(
49
-          side: const BorderSide(color: Color(0xFFFF703B), width: 2.0),
50
-          borderRadius: BorderRadius.all(Radius.circular(24.5.w)),
51
-        )
114
+        minimumSize: _btnSize,
115
+        shape: _btnShape,
52
       ),
116
       ),
53
-      onPressed: onCancel,
117
+      onPressed: _handleCancel,
54
     );
118
     );
55
   }
119
   }
56
 
120
 
57
   Widget _alert() {
121
   Widget _alert() {
58
     return SimpleDialog(
122
     return SimpleDialog(
59
-      title: Text(title),
123
+      shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(24.w)),
124
+      titleTextStyle: _titleStyle,
125
+      title: Text(title, textAlign: TextAlign.center),
60
         children: [
126
         children: [
61
-          if (null != message) Text(message!),
127
+          if (null != message) Text(message!, textAlign: TextAlign.center, style: _messageStyle),
62
           if (null != content) content!,
128
           if (null != content) content!,
129
+          SizedBox(height: 16.w),
63
           Center(
130
           Center(
64
             child: _confirmBtn(),
131
             child: _confirmBtn(),
65
-          )
132
+          ),
133
+          SizedBox(height: 10.w),
66
         ]
134
         ]
67
     );
135
     );
68
   }
136
   }
69
 
137
 
70
   Widget _dialog() {
138
   Widget _dialog() {
139
+    Widget hSpacer = SizedBox(width: 16.w);
140
+
71
     return SimpleDialog(
141
     return SimpleDialog(
72
-        title: Text(title),
142
+        shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(24.w)),
143
+        titleTextStyle: _titleStyle,
144
+        title: Text(title, textAlign: TextAlign.center),
145
+        alignment: Alignment.center,
73
         children: [
146
         children: [
74
-          if (null != message) Text(message!),
147
+          if (null != message) Text(message!, textAlign: TextAlign.center, style: _messageStyle),
75
           if (null != content) content!,
148
           if (null != content) content!,
149
+          SizedBox(height: 16.w),
76
           Row(
150
           Row(
151
+            mainAxisAlignment: MainAxisAlignment.center,
77
             children: [
152
             children: [
153
+              hSpacer,
78
               Center(
154
               Center(
79
                 child: _confirmBtn(),
155
                 child: _confirmBtn(),
80
               ),
156
               ),
157
+              hSpacer,
81
               Center(
158
               Center(
82
                 child: _cancelBtn(),
159
                 child: _cancelBtn(),
83
-              )
160
+              ),
161
+              hSpacer,
84
             ],
162
             ],
85
-          )
163
+          ),
164
+          SizedBox(height: 10.w),
86
         ]
165
         ]
87
     );
166
     );
88
   }
167
   }