Browse Source

[new]增加通知栏权限设置

zk 6 months ago
parent
commit
bb9aae8bca

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

@@ -366,4 +366,8 @@
     <string name="track_analyse_result_title">分析结果总结:</string>
     <string name="track_analyse_done">分析完毕</string>
     <string name="track_analyse_done_detail">过往的常去动态定位分析完毕,请看下方</string>
+    <string name="permission_notification_setting">通知栏权限</string>
+    <string name="permission_notification_setting_subtitle">
+        开启通知栏权限,可随时查看好友“每日轨迹”
+    </string>
 </resources>

+ 16 - 0
lib/module/permission/permission_setting_controller.dart

@@ -6,8 +6,10 @@ import 'package:injectable/injectable.dart';
 import 'package:location/base/base_controller.dart';
 import 'package:location/data/repositories/phone_event_repository.dart';
 import 'package:location/resource/string.gen.dart';
+import 'package:location/utils/notification_util.dart';
 import 'package:location/utils/toast_util.dart';
 import 'package:mobile_use_statistics/flutter_mobile_statistics.dart';
+import 'package:permission_handler/permission_handler.dart';
 import '../../utils/permission_util.dart';
 
 @injectable
@@ -82,4 +84,18 @@ class PermissionSettingController extends BaseController {
       ToastUtil.show(StringName.permissionRequestFail);
     }
   }
+
+  void openNotificationSetting() async {
+    bool hasPermission = await NotificationUtil.hasNotificationPermission();
+    if (hasPermission) {
+      ToastUtil.show(StringName.permissionSettingSuccess);
+      return;
+    }
+    hasPermission = await NotificationUtil.requestNotificationPermission();
+    if (hasPermission) {
+      ToastUtil.show(StringName.permissionSettingSuccess);
+    } else {
+      ToastUtil.show(StringName.permissionRequestFail);
+    }
+  }
 }

+ 5 - 0
lib/module/permission/permission_setting_page.dart

@@ -35,6 +35,10 @@ class PermissionSettingPage extends BasePage<PermissionSettingController> {
                 StringName.permissionPhoneScreenSettingSubtitle, () {
               controller.openPhoneScreenSetting();
             }),
+            buildPermissionItem(StringName.permissionNotificationSetting,
+                StringName.permissionNotificationSettingSubtitle, () {
+              controller.openNotificationSetting();
+            }),
             Obx(() {
               return Visibility(
                 visible: controller.permissionShowBattery,
@@ -76,6 +80,7 @@ class PermissionSettingPage extends BasePage<PermissionSettingController> {
       ),
       padding: EdgeInsets.symmetric(horizontal: 12.w, vertical: 22.w),
       child: Column(
+        crossAxisAlignment: CrossAxisAlignment.start,
         children: [
           Row(
             children: [

+ 6 - 0
lib/resource/string.gen.dart

@@ -304,6 +304,10 @@ class StringName {
   static String get trackAnalyseResultTitle => 'track_analyse_result_title'.tr; // 分析结果总结:
   static String get trackAnalyseDone => 'track_analyse_done'.tr; // 分析完毕
   static String get trackAnalyseDoneDetail => 'track_analyse_done_detail'.tr; // 过往的常去动态定位分析完毕,请看下方
+  static String get permissionNotificationSetting =>
+      'permission_notification_setting'.tr; // 通知栏权限
+  static String get permissionNotificationSettingSubtitle =>
+      'permission_notification_setting_subtitle'.tr; // 开启通知栏权限,可随时查看好友“每日轨迹”
 }
 class StringMultiSource {
   StringMultiSource._();
@@ -611,6 +615,8 @@ class StringMultiSource {
       'track_analyse_result_title': '分析结果总结:',
       'track_analyse_done': '分析完毕',
       'track_analyse_done_detail': '过往的常去动态定位分析完毕,请看下方',
+      'permission_notification_setting': '通知栏权限',
+      'permission_notification_setting_subtitle': '开启通知栏权限,可随时查看好友“每日轨迹”',
     },
   };
 }

+ 15 - 0
lib/utils/notification_util.dart

@@ -0,0 +1,15 @@
+import 'package:permission_handler/permission_handler.dart';
+
+class NotificationUtil {
+  NotificationUtil._();
+
+  static Future<bool> hasNotificationPermission() async {
+    final status = await Permission.notification.status;
+    return status.isGranted;
+  }
+
+  static Future<bool> requestNotificationPermission() async {
+    final status = await Permission.locationWhenInUse.request();
+    return status.isGranted;
+  }
+}