Browse Source

[new]增加Android端定位权限申请弹窗

zk 6 months ago
parent
commit
3c7939e382

+ 6 - 0
assets/string/base/string.xml

@@ -295,4 +295,10 @@
     <string name="trace_detail_search_hint">查找地址</string>
     <string name="trace_detail_title">Ta的线路轨迹</string>
     <string name="urgent_contact_help_send_too_fast">请求发送频繁,请稍后重试</string>
+    <string name="dialog_location_permission_tips">
+        位置权限使用说明,使用地图和定位功能需要获取“定位权限”
+    </string>
+    <string name="dialog_location_permission_confirm_txt">去定位</string>
+    <string name="dialog_location_always_permission_title">允许定位权限</string>
+    <string name="dialog_location_always_permission_confirm_txt">去设置</string>
 </resources>

+ 12 - 7
lib/dialog/common_confirm_dialog.dart

@@ -24,13 +24,19 @@ class CommonConfirmDialog {
         clickMaskDismiss: clickMaskDismiss,
         onDismiss: onDismiss,
         builder: (_) {
-          return _CommonConfirmDialog(
+          return CommonConfirmView(
               titleWidget: titleWidget,
               descWidget: descWidget,
               confirmText: confirmText,
               cancelText: cancelText,
-              cancelOnTap: cancelOnTap,
-              confirmOnTap: confirmOnTap);
+              cancelOnTap: () {
+                CommonConfirmDialog.dismiss(tag: tag);
+                cancelOnTap?.call();
+              },
+              confirmOnTap: () {
+                CommonConfirmDialog.dismiss(tag: tag);
+                confirmOnTap();
+              });
         });
   }
 
@@ -39,7 +45,7 @@ class CommonConfirmDialog {
   }
 }
 
-class _CommonConfirmDialog extends Dialog {
+class CommonConfirmView extends Dialog {
   final Widget titleWidget;
   final Widget descWidget;
   final String confirmText;
@@ -47,7 +53,8 @@ class _CommonConfirmDialog extends Dialog {
   final VoidCallback? cancelOnTap;
   final VoidCallback confirmOnTap;
 
-  const _CommonConfirmDialog({
+  const CommonConfirmView({
+    super.key,
     required this.titleWidget,
     required this.descWidget,
     required this.confirmText,
@@ -80,7 +87,6 @@ class _CommonConfirmDialog extends Dialog {
                   SizedBox(height: 31.w),
                   GestureDetector(
                     onTap: () {
-                      CommonConfirmDialog.dismiss();
                       confirmOnTap();
                     },
                     child: Container(
@@ -101,7 +107,6 @@ class _CommonConfirmDialog extends Dialog {
                 right: 12.w,
                 child: GestureDetector(
                     onTap: () {
-                      CommonConfirmDialog.dismiss();
                       cancelOnTap?.call();
                     },
                     child: Assets.images.iconDialogClose

+ 62 - 4
lib/dialog/location_permission_dialog.dart

@@ -5,10 +5,12 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
 import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
 import 'package:get/get.dart';
 import 'package:location/resource/assets.gen.dart';
+import 'package:location/resource/colors.gen.dart';
 import 'package:location/resource/string.gen.dart';
 import 'package:location/utils/common_expand.dart';
 
 import '../utils/common_style.dart';
+import 'common_confirm_dialog.dart';
 
 class LocationPermissionDialog {
   static const String _tag = "LocationPermissionDialog";
@@ -18,7 +20,7 @@ class LocationPermissionDialog {
         tag: _tag,
         builder: (_) {
           if (Platform.isAndroid) {
-            return CupertinoLocationView(onNextStep: onNextStep);
+            return AndroidLocationView(onNextStep: onNextStep);
           } else {
             return CupertinoLocationView(onNextStep: onNextStep);
           }
@@ -31,7 +33,29 @@ class LocationPermissionDialog {
 }
 
 class AndroidLocationView extends Dialog {
-  const AndroidLocationView({super.key});
+  final VoidCallback onNextStep;
+
+  const AndroidLocationView({super.key, required this.onNextStep});
+
+  @override
+  Widget build(BuildContext context) {
+    return CommonConfirmView(
+        titleWidget: Text(StringName.kindlyReminder,
+            style: TextStyle(
+                fontSize: 17.sp,
+                color: '#333333'.color,
+                fontWeight: FontWeight.bold)),
+        descWidget: Text(StringName.dialogLocationPermissionTips,
+            style: TextStyle(fontSize: 15.sp, color: '#404040'.color)),
+        confirmText: StringName.dialogLocationPermissionConfirmTxt,
+        cancelOnTap: () {
+          LocationPermissionDialog.dismiss();
+        },
+        confirmOnTap: () {
+          LocationPermissionDialog.dismiss();
+          onNextStep.call();
+        });
+  }
 }
 
 class CupertinoLocationView extends Dialog {
@@ -105,10 +129,11 @@ class LocationAlwaysPermissionDialog {
   static void show({required VoidCallback onNextStep}) {
     SmartDialog.show(
         tag: _tag,
-        alignment: Alignment.bottomCenter,
+        alignment:
+            Platform.isAndroid ? Alignment.center : Alignment.bottomCenter,
         builder: (_) {
           if (Platform.isAndroid) {
-            return CupertinoLocationAlwaysView(onNextStep: onNextStep);
+            return AndroidLocationAlwaysView(onNextStep: onNextStep);
           } else {
             return CupertinoLocationAlwaysView(onNextStep: onNextStep);
           }
@@ -120,6 +145,39 @@ class LocationAlwaysPermissionDialog {
   }
 }
 
+class AndroidLocationAlwaysView extends Dialog {
+  final VoidCallback onNextStep;
+
+  const AndroidLocationAlwaysView({super.key, required this.onNextStep});
+
+  @override
+  Widget build(BuildContext context) {
+    return CommonConfirmView(
+        titleWidget: Text(StringName.dialogLocationAlwaysPermissionTitle,
+            style: TextStyle(
+                fontSize: 17.sp,
+                color: '#333333'.color,
+                fontWeight: FontWeight.bold)),
+        descWidget: RichText(
+            text: TextSpan(
+                style: TextStyle(fontSize: 15.sp, color: '#404040'.color),
+                children: [
+              TextSpan(text: '如需要定位实时更新您的位置,需要在后台访问您的位置,避免轨迹缺失,请在定位权限中选择'),
+              TextSpan(
+                  text: '“始终允许”',
+                  style: TextStyle(color: ColorName.colorPrimary)),
+            ])),
+        confirmText: StringName.dialogLocationAlwaysPermissionConfirmTxt,
+        cancelOnTap: () {
+          LocationAlwaysPermissionDialog.dismiss();
+        },
+        confirmOnTap: () {
+          LocationAlwaysPermissionDialog.dismiss();
+          onNextStep.call();
+        });
+  }
+}
+
 class CupertinoLocationAlwaysView extends Dialog {
   final VoidCallback onNextStep;
 

+ 9 - 2
lib/resource/string.gen.dart

@@ -243,8 +243,11 @@ class StringName {
   static final String traceDetail = 'trace_detail'.tr; // 轨迹详情
   static final String traceDetailSearchHint = 'trace_detail_search_hint'.tr; // 查找地址
   static final String traceDetailTitle = 'trace_detail_title'.tr; // Ta的线路轨迹
-  static final String urgentContactHelpSendTooFast =
-      'urgent_contact_help_send_too_fast'.tr; // 请求发送频繁,请稍后重试
+  static final String urgentContactHelpSendTooFast = 'urgent_contact_help_send_too_fast'.tr; // 请求发送频繁,请稍后重试
+  static final String dialogLocationPermissionTips = 'dialog_location_permission_tips'.tr; // 位置权限使用说明,使用地图和定位功能需要获取“定位权限”
+  static final String dialogLocationPermissionConfirmTxt = 'dialog_location_permission_confirm_txt'.tr; // 去定位
+  static final String dialogLocationAlwaysPermissionTitle = 'dialog_location_always_permission_title'.tr; // 允许定位权限
+  static final String dialogLocationAlwaysPermissionConfirmTxt = 'dialog_location_always_permission_confirm_txt'.tr; // 去设置
 }
 class StringMultiSource {
   StringMultiSource._();
@@ -492,6 +495,10 @@ class StringMultiSource {
       'trace_detail_search_hint': '查找地址',
       'trace_detail_title': 'Ta的线路轨迹',
       'urgent_contact_help_send_too_fast': '请求发送频繁,请稍后重试',
+      'dialog_location_permission_tips': '位置权限使用说明,使用地图和定位功能需要获取“定位权限”',
+      'dialog_location_permission_confirm_txt': '去定位',
+      'dialog_location_always_permission_title': '允许定位权限',
+      'dialog_location_always_permission_confirm_txt': '去设置',
     },
   };
 }