Browse Source

[fix]亲密度分析,未授权权限时,提示并跳转到系统的设置页面

hezihao 7 tháng trước cách đây
mục cha
commit
e3d7304afa

+ 1 - 1
assets/string/base/string.xml

@@ -400,7 +400,7 @@
     <string name="logout_dialog_confirm">确认</string>
     <string name="logout_dialog_desc">确定退出登录吗?</string>
 
-    <string name="picker_image_permission_denied_tip">请允许权限,才能使用该功能</string>
+    <string name="picker_image_permission_denied_tip">请允许照片和视频权限,才能使用该功能</string>
 
     <string name="skip">跳过</string>
     <string name="copy_success">已复制</string>

+ 3 - 3
lib/di/get_it.config.dart

@@ -133,6 +133,9 @@ extension GetItInjectableX on _i174.GetIt {
     gh.factory<_i507.KeyboardTutorialController>(
       () => _i507.KeyboardTutorialController(),
     );
+    gh.factory<_i101.KeyboardTutorialVideoController>(
+      () => _i101.KeyboardTutorialVideoController(),
+    );
     gh.factory<_i973.SplashController>(() => _i973.SplashController());
     gh.factory<_i333.DiscountController>(() => _i333.DiscountController());
     gh.factory<_i1060.ZodiacLoveIntimacyController>(
@@ -141,9 +144,6 @@ extension GetItInjectableX on _i174.GetIt {
     gh.factory<_i415.KeyboardMethodHandler>(
       () => _i415.KeyboardMethodHandler(),
     );
-    gh.factory<_i101.KeyboardTutorialVideoController>(
-      () => _i101.KeyboardTutorialVideoController(),
-    );
     gh.lazySingleton<_i495.WechatLoginService>(
       () => _i495.WechatLoginService(),
     );

+ 8 - 16
lib/module/intimacy_analyse/analyse_report/intimacy_analyse_report_view_controller.dart

@@ -107,22 +107,14 @@ class IntimacyAnalyseReportController extends BaseController {
       ProfilePage.start();
       return;
     }
-    try {
-      // 跳转到图片选择,并返回选择的图片列表
-      List<AssetEntity> selectedAssetList = await ImagePickerUtil.pickImage(
-        context,
-        maxAssetsCount: intimacyAnalyzeConfigHelper.getMaxAssetsCount(),
-      );
-      // 跳转到亲密度分析上传页
-      if (selectedAssetList.isNotEmpty) {
-        IntimacyAnalyseUploadPage.start(selectedAssetList);
-      }
-    } catch (e) {
-      if (e is StateError) {
-        ToastUtil.show(StringName.pickerImagePermissionDeniedTip);
-      } else {
-        rethrow;
-      }
+    // 跳转到图片选择,并返回选择的图片列表
+    List<AssetEntity>? selectedAssetList = await ImagePickerUtil.pickImage(
+      context,
+      maxAssetsCount: intimacyAnalyzeConfigHelper.getMaxAssetsCount(),
+    );
+    // 跳转到亲密度分析上传页
+    if (selectedAssetList?.isNotEmpty == true) {
+      IntimacyAnalyseUploadPage.start(selectedAssetList!);
     }
   }
 }

+ 7 - 15
lib/module/intimacy_analyse/intimacy_analyse_upload/intimacy_analyse_upload_controller.dart

@@ -256,21 +256,13 @@ class IntimacyAnalyseUploadController extends BaseController {
         intimacyAnalyzeConfigHelper.getMaxAssetsCount() - uploadInfoList.length;
 
     // 跳转到图片选择,并返回选择的图片列表
-    try {
-      List<AssetEntity> selectedAssetList = await ImagePickerUtil.pickImage(
-        context,
-        maxAssetsCount: count,
-      );
-      // 选择了新图片,触发上传
-      if (selectedAssetList.isNotEmpty) {
-        _handleSelectedAssetUpload(selectedAssetList);
-      }
-    } catch (e) {
-      if (e is StateError) {
-        ToastUtil.show(StringName.pickerImagePermissionDeniedTip);
-      } else {
-        rethrow;
-      }
+    List<AssetEntity>? selectedAssetList = await ImagePickerUtil.pickImage(
+      context,
+      maxAssetsCount: count,
+    );
+    // 选择了新图片,触发上传
+    if (selectedAssetList?.isNotEmpty == true) {
+      _handleSelectedAssetUpload(selectedAssetList!);
     }
   }
 

+ 7 - 13
lib/module/intimacy_analyse/screenshot_reply/conversation_analysis/conversation_analysis_controller.dart

@@ -235,13 +235,13 @@ class ConversationAnalysisController extends BaseController {
     // 计算还可以上传多少张图片
     int count =
         intimacyAnalyzeConfigHelper.getMaxAssetsCount() - uploadInfoList.length;
-    try {
-      // 跳转到图片选择,并返回选择的图片列表
-      List<AssetEntity> selectedAssetList = await ImagePickerUtil.pickImage(
-        context,
-        maxAssetsCount: count,
-      );
-      // 选择了图片,切换到上传视图
+    // 跳转到图片选择,并返回选择的图片列表
+    List<AssetEntity>? selectedAssetList = await ImagePickerUtil.pickImage(
+      context,
+      maxAssetsCount: count,
+    );
+    // 选择了图片,切换到上传视图
+    if (selectedAssetList != null) {
       if (selectedAssetList.isNotEmpty) {
         _handleSelectedAssetUpload(selectedAssetList);
         isUploadPage.value = true;
@@ -249,12 +249,6 @@ class ConversationAnalysisController extends BaseController {
         // 没选择图片,切换到例子视图
         isUploadPage.value = false;
       }
-    } catch (e) {
-      if (e is StateError) {
-        ToastUtil.show(StringName.pickerImagePermissionDeniedTip);
-      } else {
-        rethrow;
-      }
     }
   }
 

+ 12 - 21
lib/module/intimacy_analyse/screenshot_reply/scan_image_reply/scan_image_reply_controller.dart

@@ -180,27 +180,18 @@ class ScanImageReplyController extends BaseController {
       ToastUtil.show(StringName.intimacyAnalyseIngPleaseWait);
       return;
     }
-    try {
-      // 跳转到图片选择,并返回选择的图片列表
-      List<AssetEntity> selectedAssetList = await ImagePickerUtil.pickImage(
-        context,
-        // 只能最多上传1张图片
-        maxAssetsCount: 1,
-      );
-
-      // 切换为上传页
-      if (selectedAssetList.isNotEmpty) {
-        // 重置数据
-        _resetData();
-        // 上传图片
-        _handleSelectedAssetUpload(selectedAssetList);
-      }
-    } catch (e) {
-      if (e is StateError) {
-        ToastUtil.show(StringName.pickerImagePermissionDeniedTip);
-      } else {
-        rethrow;
-      }
+    // 跳转到图片选择,并返回选择的图片列表
+    List<AssetEntity>? selectedAssetList = await ImagePickerUtil.pickImage(
+      context,
+      // 只能最多上传1张图片
+      maxAssetsCount: 1,
+    );
+    // 切换为上传页
+    if (selectedAssetList?.isNotEmpty == true) {
+      // 重置数据
+      _resetData();
+      // 上传图片
+      _handleSelectedAssetUpload(selectedAssetList!);
     }
   }
 

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

@@ -291,7 +291,7 @@ class StringName {
   static final String logoutDialogCancel = 'logout_dialog_cancel'.tr; // 取消
   static final String logoutDialogConfirm = 'logout_dialog_confirm'.tr; // 确认
   static final String logoutDialogDesc = 'logout_dialog_desc'.tr; // 确定退出登录吗?
-  static final String pickerImagePermissionDeniedTip = 'picker_image_permission_denied_tip'.tr; // 请允许权限,才能使用该功能
+  static final String pickerImagePermissionDeniedTip = 'picker_image_permission_denied_tip'.tr; // 请允许照片和视频权限,才能使用该功能
   static final String skip = 'skip'.tr; // 跳过
   static final String copySuccess = 'copy_success'.tr; // 已复制
   static final String newUserGenderTitle = 'new_user_gender_title'.tr; // Hi,欢迎来到追爱小键盘
@@ -637,7 +637,7 @@ class StringMultiSource {
       'logout_dialog_cancel': '取消',
       'logout_dialog_confirm': '确认',
       'logout_dialog_desc': '确定退出登录吗?',
-      'picker_image_permission_denied_tip': '请允许权限,才能使用该功能',
+      'picker_image_permission_denied_tip': '请允许照片和视频权限,才能使用该功能',
       'skip': '跳过',
       'copy_success': '已复制',
       'new_user_gender_title': 'Hi,欢迎来到追爱小键盘',

+ 11 - 0
lib/utils/app_setting_util.dart

@@ -0,0 +1,11 @@
+import 'package:app_settings/app_settings.dart';
+
+/// App设置工具类
+class AppSettingUtil {
+  AppSettingUtil._();
+
+  /// 打开系统中的App的设置页面
+  static void jumpSystemAppSetting() {
+    AppSettings.openAppSettings();
+  }
+}

+ 45 - 31
lib/utils/image_picker_util.dart

@@ -1,6 +1,8 @@
 import 'dart:io';
 
 import 'package:flutter/cupertino.dart';
+import 'package:keyboard/utils/app_setting_util.dart';
+import 'package:keyboard/utils/toast_util.dart';
 import 'package:wechat_assets_picker/wechat_assets_picker.dart';
 
 import '../resource/colors.gen.dart';
@@ -11,42 +13,54 @@ class ImagePickerUtil {
   static final Color _themeColor = ColorName.colorBrand;
 
   /// 选择图片
-  static Future<List<AssetEntity>> pickImage(
+  static Future<List<AssetEntity>?> pickImage(
     BuildContext context, {
     required int maxAssetsCount,
     List<AssetEntity> selectedAssets = const [],
   }) async {
-    return await AssetPicker.pickAssets(
-          context,
-          pickerConfig: AssetPickerConfig(
-            // 最大选择数量
-            maxAssets: maxAssetsCount,
-            // 已选择的图片列表
-            selectedAssets: selectedAssets,
-            // 自定义按钮文字
-            textDelegate: const CustomChineseDelegate(),
-            // 主题
-            pickerTheme: AssetPicker.themeData(
-              // 主题色
-              _themeColor,
-              // 深色默认
-              light: false,
+    try {
+      return await AssetPicker.pickAssets(
+            context,
+            pickerConfig: AssetPickerConfig(
+              // 最大选择数量
+              maxAssets: maxAssetsCount,
+              // 已选择的图片列表
+              selectedAssets: selectedAssets,
+              // 自定义按钮文字
+              textDelegate: const CustomChineseDelegate(),
+              // 主题
+              pickerTheme: AssetPicker.themeData(
+                // 主题色
+                _themeColor,
+                // 深色默认
+                light: false,
+              ),
+              // 设置为不能预览的模式
+              specialPickerType: SpecialPickerType.noPreview,
+              // 只能选取图片类型
+              requestType: RequestType.image,
+              // 关闭拽托选择
+              dragToSelect: false,
+              // 实现最近相册的名字显示
+              pathNameBuilder:
+                  (AssetPathEntity path) => switch (path) {
+                    final p when p.isAll => StringName.recently,
+                    _ => path.name,
+                  },
             ),
-            // 设置为不能预览的模式
-            specialPickerType: SpecialPickerType.noPreview,
-            // 只能选取图片类型
-            requestType: RequestType.image,
-            // 关闭拽托选择
-            dragToSelect: false,
-            // 实现最近相册的名字显示
-            pathNameBuilder:
-                (AssetPathEntity path) => switch (path) {
-                  final p when p.isAll => StringName.recently,
-                  _ => path.name,
-                },
-          ),
-        ) ??
-        [];
+          ) ??
+          [];
+    } catch (e) {
+      if (e is StateError) {
+        ToastUtil.show(StringName.pickerImagePermissionDeniedTip);
+        Future.delayed(Duration(milliseconds: 400), () {
+          AppSettingUtil.jumpSystemAppSetting();
+        });
+      } else {
+        rethrow;
+      }
+    }
+    return null;
   }
 
   /// 跳转到图片预览

+ 8 - 0
pubspec.lock

@@ -48,6 +48,14 @@ packages:
       url: "https://pub.dev"
     source: hosted
     version: "0.4.0"
+  app_settings:
+    dependency: "direct main"
+    description:
+      name: app_settings
+      sha256: "3e46c561441e5820d3a25339bf8b51b9e45a5f686873851a20c257a530917795"
+      url: "https://pub.dev"
+    source: hosted
+    version: "6.1.1"
   app_tracking_transparency:
     dependency: "direct main"
     description:

+ 2 - 0
pubspec.yaml

@@ -35,6 +35,8 @@ dependencies:
   mmkv: ^2.1.0
   #网页跳转
   webview_flutter: ^4.10.0
+  # 系统的App设置
+  app_settings: ^6.1.1
 
   #屏幕适配
   flutter_screenutil: ^5.9.3