Browse Source

Merge branch 'new_dev' of https://github.com/deepcloud2048/deep_voice into new_dev

newdev_shunjiawei
liwei1dao 1 year ago
parent
commit
69bab4b5ad
  1. 20
      lib/modules/permissions/controllers/permissions_controller.dart
  2. 40
      lib/modules/permissions/models/permission_group.dart
  3. 59
      lib/modules/permissions/views/permissions_view.dart

20
lib/modules/permissions/controllers/permissions_controller.dart

@ -12,7 +12,7 @@ class PermissionsController extends GetxController {
// 是否正在请求权限 // 是否正在请求权限
final RxBool isRequestingPermission = false.obs; final RxBool isRequestingPermission = false.obs;
// Android版本信息(用于权限组显示判断) // Android版本信息(用于权限组显示判断)
final RxInt androidSdkVersion = 0.obs; final RxInt androidSdkVersion = 0.obs;
@ -22,7 +22,7 @@ class PermissionsController extends GetxController {
_initAndroidVersion(); _initAndroidVersion();
checkAllPermissions(); checkAllPermissions();
} }
/// 初始化Android版本信息 /// 初始化Android版本信息
Future<void> _initAndroidVersion() async { Future<void> _initAndroidVersion() async {
if (Platform.isAndroid) { if (Platform.isAndroid) {
@ -36,7 +36,7 @@ class PermissionsController extends GetxController {
} }
} }
} }
/// 检查是否应该显示蓝牙权限组 /// 检查是否应该显示蓝牙权限组
bool shouldShowBluetoothPermissions() { bool shouldShowBluetoothPermissions() {
if (Platform.isAndroid) { if (Platform.isAndroid) {
@ -48,7 +48,7 @@ class PermissionsController extends GetxController {
} }
return false; return false;
} }
/// 检查是否应该显示存储权限组 /// 检查是否应该显示存储权限组
bool shouldShowStoragePermissions() { bool shouldShowStoragePermissions() {
if (Platform.isAndroid) { if (Platform.isAndroid) {
@ -109,22 +109,22 @@ class PermissionsController extends GetxController {
/// 获取平台特定的权限列表 /// 获取平台特定的权限列表
Future<List<Permission>> _getPlatformPermissions() async { Future<List<Permission>> _getPlatformPermissions() async {
final bluetoothPermissions = await _getBluetoothPermissions(); final bluetoothPermissions = await _getBluetoothPermissions();
if (Platform.isIOS) { if (Platform.isIOS) {
final List<Permission> permissions = [ final List<Permission> permissions = [
Permission.calendarFullAccess, Permission.calendarFullAccess,
Permission.location, Permission.location,
Permission.contacts, Permission.contacts,
...bluetoothPermissions, //...bluetoothPermissions,
Permission.notification, Permission.notification,
Permission.microphone, Permission.microphone,
]; ];
// iOS系统不添加存储权限(根据shouldShowStoragePermissions方法) // iOS系统不添加存储权限(根据shouldShowStoragePermissions方法)
if (shouldShowStoragePermissions()) { if (shouldShowStoragePermissions()) {
permissions.add(Permission.storage); permissions.add(Permission.storage);
} }
return permissions; return permissions;
} else if (Platform.isAndroid) { } else if (Platform.isAndroid) {
final List<Permission> permissions = [ final List<Permission> permissions = [
@ -138,12 +138,12 @@ class PermissionsController extends GetxController {
Permission.scheduleExactAlarm, Permission.scheduleExactAlarm,
Permission.microphone, Permission.microphone,
]; ];
// 只在Android 10及以下版本添加存储权限 // 只在Android 10及以下版本添加存储权限
if (shouldShowStoragePermissions()) { if (shouldShowStoragePermissions()) {
permissions.add(Permission.storage); permissions.add(Permission.storage);
} }
return permissions; return permissions;
} }
return []; return [];

40
lib/modules/permissions/models/permission_group.dart

@ -1,5 +1,7 @@
import 'dart:io';
import 'package:flutter/material.dart'; 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';
class PermissionGroup { class PermissionGroup {
final String titleKey; final String titleKey;
@ -12,7 +14,37 @@ class PermissionGroup {
required this.permissions, required this.permissions,
}); });
static List<PermissionGroup> getPlatformGroups() { /// 获取蓝牙权限列表(根据平台和Android版本)
static Future<List<Permission>> _getBluetoothPermissions() async {
if (Platform.isAndroid) {
try {
final deviceInfo = DeviceInfoPlugin();
final androidInfo = await deviceInfo.androidInfo;
// Android 12+ (API 31+) 使用新的蓝牙权限
if (androidInfo.version.sdkInt >= 31) {
return [
Permission.bluetoothScan,
Permission.bluetoothConnect,
];
}
// Android 12以下不显示蓝牙权限(因为会自动授予)
return [];
} catch (e) {
print('获取Android版本信息失败: $e');
return [];
}
} else if (Platform.isIOS) {
// iOS使用基本蓝牙权限
return [Permission.bluetooth];
}
return [];
}
/// 获取平台特定的权限组列表(异步方法)
static Future<List<PermissionGroup>> getPlatformGroups() async {
// 动态获取蓝牙权限列表
final bluetoothPermissions = await _getBluetoothPermissions();
return [ return [
// 通讯权限组 - 仅Android(包含联系人权限) // 通讯权限组 - 仅Android(包含联系人权限)
const PermissionGroup( const PermissionGroup(
@ -20,11 +52,11 @@ class PermissionGroup {
icon: Icons.phone_android, icon: Icons.phone_android,
permissions: [Permission.phone, Permission.sms, Permission.contacts], permissions: [Permission.phone, Permission.sms, Permission.contacts],
), ),
// 蓝牙权限组 - Android 12+ // 蓝牙权限组 - 根据平台动态获取权限
const PermissionGroup( PermissionGroup(
titleKey: 'bluetoothPermissions', titleKey: 'bluetoothPermissions',
icon: Icons.bluetooth, icon: Icons.bluetooth,
permissions: [Permission.bluetoothScan, Permission.bluetoothConnect], permissions: bluetoothPermissions,
), ),
// 通知权限组 // 通知权限组
const PermissionGroup( const PermissionGroup(

59
lib/modules/permissions/views/permissions_view.dart

@ -46,39 +46,52 @@ class PermissionsView extends GetView<PermissionsController> {
return RefreshIndicator( return RefreshIndicator(
onRefresh: controller.checkAllPermissions, onRefresh: controller.checkAllPermissions,
child: ListView( child: SingleChildScrollView(
padding: EdgeInsets.symmetric(horizontal: 16.w, vertical: 16.h), padding: EdgeInsets.symmetric(horizontal: 16.w, vertical: 16.h),
children: _buildPermissionGroups(isDarkMode), child: _buildPermissionGroups(isDarkMode),
), ),
); );
}), }),
); );
} }
List<Widget> _buildPermissionGroups(bool isDarkMode) { Widget _buildPermissionGroups(bool isDarkMode) {
final groups = PermissionGroup.getPlatformGroups(); return FutureBuilder<List<PermissionGroup>>(
final List<Widget> widgets = []; future: PermissionGroup.getPlatformGroups(),
builder: (context, snapshot) {
for (int i = 0; i < groups.length; i++) { if (snapshot.connectionState == ConnectionState.waiting) {
final group = groups[i]; return const Center(child: CircularProgressIndicator());
}
// 过滤平台特定权限
if (_shouldShowGroup(group)) {
widgets.add(_buildPermissionSection(
group.titleKey,
group.icon,
group.permissions,
controller.permissionStatuses,
isDarkMode,
));
if (i < groups.length - 1) { if (snapshot.hasError) {
widgets.add(SizedBox(height: 20.h)); return Center(child: Text('加载权限组失败: ${snapshot.error}'));
} }
}
} final groups = snapshot.data ?? [];
final List<Widget> widgets = [];
return widgets; for (int i = 0; i < groups.length; i++) {
final group = groups[i];
// 过滤平台特定权限
if (_shouldShowGroup(group)) {
widgets.add(_buildPermissionSection(
group.titleKey,
group.icon,
group.permissions,
controller.permissionStatuses,
isDarkMode,
));
if (i < groups.length - 1) {
widgets.add(SizedBox(height: 20.h));
}
}
}
return Column(children: widgets);
},
);
} }
bool _shouldShowGroup(PermissionGroup group) { bool _shouldShowGroup(PermissionGroup group) {

Loading…
Cancel
Save