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>
<key>NSCalendarsUsageDescription</key>
<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>
<string>Camera permission is required for QR code scanning and video calling functions</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>

8
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, // 创建日历事件需要日历写入权限
);
},
},

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:device_info_plus/device_info_plus.dart';
class PermissionGroup {
class PermissionGroupModel {
final String titleKey;
final IconData icon;
final List<Permission> permissions;
const PermissionGroup({
const PermissionGroupModel({
required this.titleKey,
required this.icon,
required this.permissions,
});
}
class PermissionGroup {
/// 获取蓝牙权限列表(根据平台和Android版本)
static Future<List<Permission>> _getBluetoothPermissions() async {
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();
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],

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 '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<PermissionsController> {
}
Widget _buildPermissionGroups(bool isDarkMode) {
return FutureBuilder<List<PermissionGroup>>(
return FutureBuilder<List<PermissionGroupModel>>(
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<Widget> 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<PermissionsController> {
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<PermissionsController> {
? 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<PermissionsController> {
),
),
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<PermissionsController> {
}
void _handlePermissionToggle(
Permission permission,
PermissionStatus status,
Permission permission,
PermissionStatus status,
bool value,
) {
if (value) {
@ -293,4 +294,4 @@ class PermissionsView extends GetView<PermissionsController> {
controller.openSettings();
}
}
}
}

2
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:

7
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:

Loading…
Cancel
Save