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

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

@ -1,5 +1,7 @@
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:device_info_plus/device_info_plus.dart';
class PermissionGroup {
final String titleKey;
@ -12,7 +14,37 @@ class PermissionGroup {
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 [
// 通讯权限组 - 仅Android(包含联系人权限)
const PermissionGroup(
@ -20,11 +52,11 @@ class PermissionGroup {
icon: Icons.phone_android,
permissions: [Permission.phone, Permission.sms, Permission.contacts],
),
// 蓝牙权限组 - Android 12+
const PermissionGroup(
// 蓝牙权限组 - 根据平台动态获取权限
PermissionGroup(
titleKey: 'bluetoothPermissions',
icon: Icons.bluetooth,
permissions: [Permission.bluetoothScan, Permission.bluetoothConnect],
permissions: bluetoothPermissions,
),
// 通知权限组
const PermissionGroup(

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

@ -46,39 +46,52 @@ class PermissionsView extends GetView<PermissionsController> {
return RefreshIndicator(
onRefresh: controller.checkAllPermissions,
child: ListView(
child: SingleChildScrollView(
padding: EdgeInsets.symmetric(horizontal: 16.w, vertical: 16.h),
children: _buildPermissionGroups(isDarkMode),
child: _buildPermissionGroups(isDarkMode),
),
);
}),
);
}
List<Widget> _buildPermissionGroups(bool isDarkMode) {
final groups = PermissionGroup.getPlatformGroups();
final List<Widget> 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,
));
Widget _buildPermissionGroups(bool isDarkMode) {
return FutureBuilder<List<PermissionGroup>>(
future: PermissionGroup.getPlatformGroups(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return const Center(child: CircularProgressIndicator());
}
if (i < groups.length - 1) {
widgets.add(SizedBox(height: 20.h));
if (snapshot.hasError) {
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) {

Loading…
Cancel
Save