Browse Source

修改日历权限

newdev_shunjiawei
tanlongsheng 1 year ago
parent
commit
fd942d8484
  1. 2
      ios/Runner/Info.plist
  2. 8
      lib/data/services/novice_guide_service.dart
  3. 26
      lib/modules/permissions/models/permission_group.dart
  4. 43
      lib/modules/permissions/views/permissions_view.dart
  5. 2
      local_plugins/jl_opus/pubspec.yaml
  6. 7
      pubspec.yaml

2
ios/Runner/Info.plist

@ -106,6 +106,8 @@
<string>Bluetooth permission is required to connect and manage audio devices</string> <string>Bluetooth permission is required to connect and manage audio devices</string>
<key>NSCalendarsUsageDescription</key> <key>NSCalendarsUsageDescription</key>
<string>Calendar permission is required to schedule and manage your audio meetings and recording tasks</string> <string>Calendar permission is required to schedule and manage your audio meetings and recording tasks</string>
<key>NSCalendarsFullAccessUsageDescription</key>
<string>Calendar permission is required to schedule and manage your audio meetings and recording tasks</string>
<key>NSCameraUsageDescription</key> <key>NSCameraUsageDescription</key>
<string>Camera permission is required for QR code scanning and video calling functions</string> <string>Camera permission is required for QR code scanning and video calling functions</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key> <key>NSLocationAlwaysAndWhenInUseUsageDescription</key>

8
lib/data/services/novice_guide_service.dart

@ -68,11 +68,11 @@ class NoviceGuideService extends GetxService {
'method': () async { 'method': () async {
//创建会议提醒需要日历权限 //创建会议提醒需要日历权限
await PermissionUtil.instance.requestPermission( await PermissionUtil.instance.requestPermission(
permissionType: Permission.calendarWriteOnly, permissionType: Permission.calendarFullAccess,
permissionName: 'calendarWrite'.tr, // 日历写入 permissionName: 'calendarFullAccess'.tr, // 日历写入
explanationText: 'calendarWritePermissionDesc'.tr, // 用于创建日历事件和提醒 explanationText: 'calendarFullAccessPermissionDesc'.tr, // 用于创建日历事件和提醒
permanentDenialText: permanentDenialText:
'calendarWritePermissionDetailDesc'.tr, // 创建日历事件需要日历写入权限 'calendarFullAccessPermissionDetailDesc'.tr, // 创建日历事件需要日历写入权限
); );
}, },
}, },

26
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:permission_handler/permission_handler.dart';
import 'package:device_info_plus/device_info_plus.dart'; import 'package:device_info_plus/device_info_plus.dart';
class PermissionGroup { class PermissionGroupModel {
final String titleKey; final String titleKey;
final IconData icon; final IconData icon;
final List<Permission> permissions; final List<Permission> permissions;
const PermissionGroup({ const PermissionGroupModel({
required this.titleKey, required this.titleKey,
required this.icon, required this.icon,
required this.permissions, required this.permissions,
}); });
}
class PermissionGroup {
/// 获取蓝牙权限列表(根据平台和Android版本) /// 获取蓝牙权限列表(根据平台和Android版本)
static Future<List<Permission>> _getBluetoothPermissions() async { static Future<List<Permission>> _getBluetoothPermissions() async {
if (Platform.isAndroid) { if (Platform.isAndroid) {
@ -41,55 +43,55 @@ class PermissionGroup {
} }
/// 获取平台特定的权限组列表(异步方法) /// 获取平台特定的权限组列表(异步方法)
static Future<List<PermissionGroup>> getPlatformGroups() async { static Future<List<PermissionGroupModel>> getPlatformGroups() async {
// 动态获取蓝牙权限列表 // 动态获取蓝牙权限列表
final bluetoothPermissions = await _getBluetoothPermissions(); final bluetoothPermissions = await _getBluetoothPermissions();
return [ return [
// 通讯权限组 - 仅Android(包含联系人权限) // 通讯权限组 - 仅Android(包含联系人权限)
const PermissionGroup( const PermissionGroupModel(
titleKey: 'communicationPermissions', titleKey: 'communicationPermissions',
icon: Icons.phone_android, icon: Icons.phone_android,
permissions: [Permission.phone, Permission.sms, Permission.contacts], permissions: [Permission.phone, Permission.sms, Permission.contacts],
), ),
// 蓝牙权限组 - 根据平台动态获取权限 // 蓝牙权限组 - 根据平台动态获取权限
PermissionGroup( PermissionGroupModel(
titleKey: 'bluetoothPermissions', titleKey: 'bluetoothPermissions',
icon: Icons.bluetooth, icon: Icons.bluetooth,
permissions: bluetoothPermissions, permissions: bluetoothPermissions,
), ),
// 通知权限组 // 通知权限组
const PermissionGroup( const PermissionGroupModel(
titleKey: 'notificationPermissions', titleKey: 'notificationPermissions',
icon: Icons.notifications, icon: Icons.notifications,
permissions: [Permission.notification], permissions: [Permission.notification],
), ),
// 闹钟权限组 - 仅Android // 闹钟权限组 - 仅Android
const PermissionGroup( const PermissionGroupModel(
titleKey: 'alarmPermissions', titleKey: 'alarmPermissions',
icon: Icons.alarm, icon: Icons.alarm,
permissions: [Permission.scheduleExactAlarm], permissions: [Permission.scheduleExactAlarm],
), ),
// 日历权限组 // 日历权限组
const PermissionGroup( const PermissionGroupModel(
titleKey: 'calendarPermissions', titleKey: 'calendarPermissions',
icon: Icons.calendar_today, icon: Icons.calendar_today,
permissions: [Permission.calendarFullAccess], permissions: [Permission.calendarFullAccess],
), ),
// 位置权限组 // 位置权限组
const PermissionGroup( const PermissionGroupModel(
titleKey: 'locationPermissions', titleKey: 'locationPermissions',
icon: Icons.location_on, icon: Icons.location_on,
permissions: [Permission.location], permissions: [Permission.location],
), ),
// 存储权限组 // 存储权限组
const PermissionGroup( const PermissionGroupModel(
titleKey: 'storagePermissions', titleKey: 'storagePermissions',
icon: Icons.storage, icon: Icons.storage,
permissions: [Permission.storage], permissions: [Permission.storage],
), ),
// 麦克风权限组 // 麦克风权限组
const PermissionGroup( const PermissionGroupModel(
titleKey: 'microphonePermissions', titleKey: 'microphonePermissions',
icon: Icons.mic, icon: Icons.mic,
permissions: [Permission.microphone], permissions: [Permission.microphone],

43
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 'package:flutter_screenutil/flutter_screenutil.dart';
import 'dart:ui'; import 'dart:ui';
import 'dart:io' show Platform; import 'dart:io' show Platform;
import 'package:device_info_plus/device_info_plus.dart';
import '../controllers/permissions_controller.dart'; import '../controllers/permissions_controller.dart';
import '../models/permission_group.dart'; import '../models/permission_group.dart';
@ -56,23 +55,23 @@ class PermissionsView extends GetView<PermissionsController> {
} }
Widget _buildPermissionGroups(bool isDarkMode) { Widget _buildPermissionGroups(bool isDarkMode) {
return FutureBuilder<List<PermissionGroup>>( return FutureBuilder<List<PermissionGroupModel>>(
future: PermissionGroup.getPlatformGroups(), future: PermissionGroup.getPlatformGroups(),
builder: (context, snapshot) { builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) { if (snapshot.connectionState == ConnectionState.waiting) {
return const Center(child: CircularProgressIndicator()); return const Center(child: CircularProgressIndicator());
} }
if (snapshot.hasError) { if (snapshot.hasError) {
return Center(child: Text('加载权限组失败: ${snapshot.error}')); return Center(child: Text('加载权限组失败: ${snapshot.error}'));
} }
final groups = snapshot.data ?? []; final groups = snapshot.data ?? [];
final List<Widget> widgets = []; final List<Widget> widgets = [];
for (int i = 0; i < groups.length; i++) { for (int i = 0; i < groups.length; i++) {
final group = groups[i]; final group = groups[i];
// 过滤平台特定权限 // 过滤平台特定权限
if (_shouldShowGroup(group)) { if (_shouldShowGroup(group)) {
widgets.add(_buildPermissionSection( widgets.add(_buildPermissionSection(
@ -82,21 +81,21 @@ class PermissionsView extends GetView<PermissionsController> {
controller.permissionStatuses, controller.permissionStatuses,
isDarkMode, isDarkMode,
)); ));
if (i < groups.length - 1) { if (i < groups.length - 1) {
widgets.add(SizedBox(height: 20.h)); widgets.add(SizedBox(height: 20.h));
} }
} }
} }
return Column(children: widgets); return Column(children: widgets);
}, },
); );
} }
bool _shouldShowGroup(PermissionGroup group) { bool _shouldShowGroup(PermissionGroupModel group) {
// Android特定权限组 // Android特定权限组
if (group.titleKey == 'communicationPermissions' || if (group.titleKey == 'communicationPermissions' ||
group.titleKey == 'alarmPermissions') { group.titleKey == 'alarmPermissions') {
return Platform.isAndroid; return Platform.isAndroid;
} }
@ -162,7 +161,8 @@ class PermissionsView extends GetView<PermissionsController> {
? ImageFilter.blur(sigmaX: 5, sigmaY: 5) ? ImageFilter.blur(sigmaX: 5, sigmaY: 5)
: ImageFilter.blur(sigmaX: 0, sigmaY: 0), : ImageFilter.blur(sigmaX: 0, sigmaY: 0),
child: Column( child: Column(
children: _buildPermissionItems(permissions, statuses, isDarkMode), children:
_buildPermissionItems(permissions, statuses, isDarkMode),
), ),
), ),
), ),
@ -238,12 +238,13 @@ class PermissionsView extends GetView<PermissionsController> {
), ),
), ),
Obx(() => Switch( Obx(() => Switch(
value: status.isGranted, value: status.isGranted,
onChanged: controller.isRequestingPermission.value onChanged: controller.isRequestingPermission.value
? null ? null
: (value) => _handlePermissionToggle(permission, status, value), : (value) =>
activeColor: Colors.blue[600], _handlePermissionToggle(permission, status, value),
)), activeColor: Colors.blue[600],
)),
], ],
), ),
); );
@ -281,8 +282,8 @@ class PermissionsView extends GetView<PermissionsController> {
} }
void _handlePermissionToggle( void _handlePermissionToggle(
Permission permission, Permission permission,
PermissionStatus status, PermissionStatus status,
bool value, bool value,
) { ) {
if (value) { if (value) {
@ -293,4 +294,4 @@ class PermissionsView extends GetView<PermissionsController> {
controller.openSettings(); controller.openSettings();
} }
} }
} }

2
local_plugins/jl_opus/pubspec.yaml

@ -11,7 +11,7 @@ dependencies:
flutter: flutter:
sdk: flutter sdk: flutter
path_provider: ^2.0.0 path_provider: ^2.0.0
permission_handler: ^11.4.0 permission_handler: ^12.0.1
dev_dependencies: dev_dependencies:
flutter_test: flutter_test:

7
pubspec.yaml

@ -28,7 +28,7 @@ dependencies:
htmltopdfwidgets: ^1.1.0 htmltopdfwidgets: ^1.1.0
wifi_iot: ^0.3.19+2 wifi_iot: ^0.3.19+2
flutter_intro: ^3.4.0 flutter_intro: ^3.4.0
permission_handler: ^10.4.5 permission_handler: ^12.0.1
web_socket_channel: ^2.4.0 web_socket_channel: ^2.4.0
flutter_dotenv: ^5.1.0 flutter_dotenv: ^5.1.0
synchronized: ^3.1.0 synchronized: ^3.1.0
@ -119,11 +119,6 @@ dev_dependencies:
build_runner: ^2.3.3 # 用于生成代码 flutter pub run build_runner build build_runner: ^2.3.3 # 用于生成代码 flutter pub run build_runner build
json_serializable: ^6.6.0 # 用于自动生成代码 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: flutter:
uses-material-design: true uses-material-design: true
shaders: shaders:

Loading…
Cancel
Save