diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index f840f7ef3..4fc81d382 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -106,6 +106,8 @@ Bluetooth permission is required to connect and manage audio devices NSCalendarsUsageDescription Calendar permission is required to schedule and manage your audio meetings and recording tasks + NSCalendarsFullAccessUsageDescription + Calendar permission is required to schedule and manage your audio meetings and recording tasks NSCameraUsageDescription Camera permission is required for QR code scanning and video calling functions NSLocationAlwaysAndWhenInUseUsageDescription diff --git a/lib/data/services/novice_guide_service.dart b/lib/data/services/novice_guide_service.dart index be154d551..fb124a77a 100644 --- a/lib/data/services/novice_guide_service.dart +++ b/lib/data/services/novice_guide_service.dart @@ -68,11 +68,11 @@ class NoviceGuideService extends GetxService { 'method': () async { //创建会议提醒需要日历权限 await PermissionUtil.instance.requestPermission( - permissionType: Permission.calendarWriteOnly, - permissionName: 'calendarWrite'.tr, // 日历写入 - explanationText: 'calendarWritePermissionDesc'.tr, // 用于创建日历事件和提醒 + permissionType: Permission.calendarFullAccess, + permissionName: 'calendarFullAccess'.tr, // 日历写入 + explanationText: 'calendarFullAccessPermissionDesc'.tr, // 用于创建日历事件和提醒 permanentDenialText: - 'calendarWritePermissionDetailDesc'.tr, // 创建日历事件需要日历写入权限 + 'calendarFullAccessPermissionDetailDesc'.tr, // 创建日历事件需要日历写入权限 ); }, }, diff --git a/lib/modules/permissions/models/permission_group.dart b/lib/modules/permissions/models/permission_group.dart index 5426a7336..c3c2ca4f6 100644 --- a/lib/modules/permissions/models/permission_group.dart +++ b/lib/modules/permissions/models/permission_group.dart @@ -3,17 +3,19 @@ import 'package:flutter/material.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:device_info_plus/device_info_plus.dart'; -class PermissionGroup { +class PermissionGroupModel { final String titleKey; final IconData icon; final List permissions; - const PermissionGroup({ + const PermissionGroupModel({ required this.titleKey, required this.icon, required this.permissions, }); +} +class PermissionGroup { /// 获取蓝牙权限列表(根据平台和Android版本) static Future> _getBluetoothPermissions() async { if (Platform.isAndroid) { @@ -41,55 +43,55 @@ class PermissionGroup { } /// 获取平台特定的权限组列表(异步方法) - static Future> getPlatformGroups() async { + static Future> getPlatformGroups() async { // 动态获取蓝牙权限列表 final bluetoothPermissions = await _getBluetoothPermissions(); - + return [ // 通讯权限组 - 仅Android(包含联系人权限) - const PermissionGroup( + const PermissionGroupModel( titleKey: 'communicationPermissions', icon: Icons.phone_android, permissions: [Permission.phone, Permission.sms, Permission.contacts], ), // 蓝牙权限组 - 根据平台动态获取权限 - PermissionGroup( + PermissionGroupModel( titleKey: 'bluetoothPermissions', icon: Icons.bluetooth, permissions: bluetoothPermissions, ), // 通知权限组 - const PermissionGroup( + const PermissionGroupModel( titleKey: 'notificationPermissions', icon: Icons.notifications, permissions: [Permission.notification], ), // 闹钟权限组 - 仅Android - const PermissionGroup( + const PermissionGroupModel( titleKey: 'alarmPermissions', icon: Icons.alarm, permissions: [Permission.scheduleExactAlarm], ), // 日历权限组 - const PermissionGroup( + const PermissionGroupModel( titleKey: 'calendarPermissions', icon: Icons.calendar_today, permissions: [Permission.calendarFullAccess], ), // 位置权限组 - const PermissionGroup( + const PermissionGroupModel( titleKey: 'locationPermissions', icon: Icons.location_on, permissions: [Permission.location], ), // 存储权限组 - const PermissionGroup( + const PermissionGroupModel( titleKey: 'storagePermissions', icon: Icons.storage, permissions: [Permission.storage], ), // 麦克风权限组 - const PermissionGroup( + const PermissionGroupModel( titleKey: 'microphonePermissions', icon: Icons.mic, permissions: [Permission.microphone], diff --git a/lib/modules/permissions/views/permissions_view.dart b/lib/modules/permissions/views/permissions_view.dart index 94d188ff2..abfed7de3 100644 --- a/lib/modules/permissions/views/permissions_view.dart +++ b/lib/modules/permissions/views/permissions_view.dart @@ -4,7 +4,6 @@ import 'package:permission_handler/permission_handler.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'dart:ui'; import 'dart:io' show Platform; -import 'package:device_info_plus/device_info_plus.dart'; import '../controllers/permissions_controller.dart'; import '../models/permission_group.dart'; @@ -56,23 +55,23 @@ class PermissionsView extends GetView { } Widget _buildPermissionGroups(bool isDarkMode) { - return FutureBuilder>( + return FutureBuilder>( future: PermissionGroup.getPlatformGroups(), builder: (context, snapshot) { if (snapshot.connectionState == ConnectionState.waiting) { return const Center(child: CircularProgressIndicator()); } - + if (snapshot.hasError) { return Center(child: Text('加载权限组失败: ${snapshot.error}')); } - + final groups = snapshot.data ?? []; final List widgets = []; for (int i = 0; i < groups.length; i++) { final group = groups[i]; - + // 过滤平台特定权限 if (_shouldShowGroup(group)) { widgets.add(_buildPermissionSection( @@ -82,21 +81,21 @@ class PermissionsView extends GetView { controller.permissionStatuses, isDarkMode, )); - + if (i < groups.length - 1) { widgets.add(SizedBox(height: 20.h)); } } } - + return Column(children: widgets); - }, - ); + }, + ); } - bool _shouldShowGroup(PermissionGroup group) { + bool _shouldShowGroup(PermissionGroupModel group) { // Android特定权限组 - if (group.titleKey == 'communicationPermissions' || + if (group.titleKey == 'communicationPermissions' || group.titleKey == 'alarmPermissions') { return Platform.isAndroid; } @@ -162,7 +161,8 @@ class PermissionsView extends GetView { ? ImageFilter.blur(sigmaX: 5, sigmaY: 5) : ImageFilter.blur(sigmaX: 0, sigmaY: 0), child: Column( - children: _buildPermissionItems(permissions, statuses, isDarkMode), + children: + _buildPermissionItems(permissions, statuses, isDarkMode), ), ), ), @@ -238,12 +238,13 @@ class PermissionsView extends GetView { ), ), Obx(() => Switch( - value: status.isGranted, - onChanged: controller.isRequestingPermission.value - ? null - : (value) => _handlePermissionToggle(permission, status, value), - activeColor: Colors.blue[600], - )), + value: status.isGranted, + onChanged: controller.isRequestingPermission.value + ? null + : (value) => + _handlePermissionToggle(permission, status, value), + activeColor: Colors.blue[600], + )), ], ), ); @@ -281,8 +282,8 @@ class PermissionsView extends GetView { } void _handlePermissionToggle( - Permission permission, - PermissionStatus status, + Permission permission, + PermissionStatus status, bool value, ) { if (value) { @@ -293,4 +294,4 @@ class PermissionsView extends GetView { controller.openSettings(); } } -} \ No newline at end of file +} diff --git a/local_plugins/jl_opus/pubspec.yaml b/local_plugins/jl_opus/pubspec.yaml index 3d553c10c..b28aaeb0d 100644 --- a/local_plugins/jl_opus/pubspec.yaml +++ b/local_plugins/jl_opus/pubspec.yaml @@ -11,7 +11,7 @@ dependencies: flutter: sdk: flutter path_provider: ^2.0.0 - permission_handler: ^11.4.0 + permission_handler: ^12.0.1 dev_dependencies: flutter_test: diff --git a/pubspec.yaml b/pubspec.yaml index 04aa9127f..f60b70b0a 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -28,7 +28,7 @@ dependencies: htmltopdfwidgets: ^1.1.0 wifi_iot: ^0.3.19+2 flutter_intro: ^3.4.0 - permission_handler: ^10.4.5 + permission_handler: ^12.0.1 web_socket_channel: ^2.4.0 flutter_dotenv: ^5.1.0 synchronized: ^3.1.0 @@ -119,11 +119,6 @@ dev_dependencies: build_runner: ^2.3.3 # 用于生成代码 flutter pub run build_runner build json_serializable: ^6.6.0 # 用于自动生成代码 -dependency_overrides: - permission_handler: ^12.0.0 - permission_handler_android: ^13.0.0 - permission_handler_apple: ^9.4.0 - flutter: uses-material-design: true shaders: