Browse Source

[new]增加录音权限申请弹窗

zk 1 year ago
parent
commit
fb02fb02ab
2 changed files with 38 additions and 12 deletions
  1. 8 8
      lib/dialog/alert_dialog.dart
  2. 30 4
      lib/module/record/record_handler.dart

+ 8 - 8
lib/dialog/alert_dialog.dart

@@ -6,7 +6,7 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
 import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
 
 class EAAlertDialog {
-  static void show({
+  static Future<T?> show<T>({
     String? title,
     String? contentText,
     Widget? contentWidget,
@@ -16,7 +16,7 @@ class EAAlertDialog {
     VoidCallback? confirmOnTap,
     VoidCallback? onDismiss,
   }) {
-    SmartDialog.show(
+    return SmartDialog.show<T>(
       builder: (_) {
         return _EAAlertDialog(
             title: title,
@@ -33,8 +33,8 @@ class EAAlertDialog {
     );
   }
 
-  static void dismiss() {
-    SmartDialog.dismiss(tag: "EAAlertDialog");
+  static void dismiss<T>({T? result}) {
+    SmartDialog.dismiss(tag: "EAAlertDialog", result: result);
   }
 }
 
@@ -211,18 +211,18 @@ class _EAAlertDialog extends Dialog {
   }
 
   void _clickConfirm() {
-    EAAlertDialog.dismiss();
-
     if (confirmOnTap != null) {
       confirmOnTap!();
     }
-  }
 
-  void _clickCancel() {
     EAAlertDialog.dismiss();
+  }
 
+  void _clickCancel() {
     if (cancelOnTap != null) {
       cancelOnTap!();
     }
+
+    EAAlertDialog.dismiss();
   }
 }

+ 30 - 4
lib/module/record/record_handler.dart

@@ -18,6 +18,7 @@ import '../../data/bean/talks.dart';
 import '../../data/consts/error_code.dart';
 import '../../data/consts/event_report_id.dart';
 import '../../data/repositories/talk_repository.dart';
+import '../../dialog/alert_dialog.dart';
 import '../../resource/string.gen.dart';
 import '../../utils/http_handler.dart';
 import '../../utils/mmkv_util.dart';
@@ -210,11 +211,36 @@ class RecordHandler {
     ToastUtil.showToast("需要授予录音权限才能使用录音功能");
   }
 
+  Future<bool> _showRequestPermissionDialog() async {
+    bool? isAllow = await EAAlertDialog.show(
+        contentText: '是否允许小听获取此设备的麦克风权限,为您提供转文字、智能总结服务?',
+        cancelText: '禁止',
+        confirmText: '允许',
+        cancelOnTap: () {
+          EAAlertDialog.dismiss(result: false);
+        },
+        confirmOnTap: () {
+          EAAlertDialog.dismiss(result: true);
+        });
+    return isAllow ?? false;
+  }
+
   Future<void> startOrContinueRecord() async {
-    var status = await Permission.microphone.request();
-    if (status != PermissionStatus.granted) {
-      _onRecordPermissionDenied();
-      return;
+    var isGranted = await Permission.microphone.status;
+    if (isGranted == PermissionStatus.granted) {
+      await Permission.microphone.request();
+    } else {
+      bool isAllow = await _showRequestPermissionDialog();
+      if (isAllow) {
+        var status = await Permission.microphone.request();
+        if (status != PermissionStatus.granted) {
+          _onRecordPermissionDenied();
+          return;
+        }
+      } else {
+        _onRecordPermissionDenied();
+        return;
+      }
     }
 
     await _requestForegroundTaskPermission().catchError((error) {