You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

103 lines
2.9 KiB

// controllers/notification_controller.dart
import 'package:get/get.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:app_settings/app_settings.dart';
class NotificationController extends GetxController {
// 权限状态
final Rx<PermissionStatus> notificationStatus = PermissionStatus.denied.obs;
final RxBool checking = false.obs;
// 初始化时检查权限
@override
void onInit() {
super.onInit();
// 延迟检查,确保服务已初始化
checkPermission();
}
// 检查通知权限状态
Future<PermissionStatus> checkPermission() async {
checking.value = true;
try {
// 检查通知权限
final status = await Permission.notification.status;
notificationStatus.value = status;
print('通知权限状态: $status');
return status;
} catch (e) {
print('检查通知权限失败: $e');
return PermissionStatus.denied;
} finally {
checking.value = false;
}
}
// 请求通知权限
Future<PermissionStatus> requestNotificationPermission() async {
try {
final status = await Permission.notification.request();
notificationStatus.value = status;
print('请求通知权限结果: $status');
return status;
} catch (e) {
print('请求通知权限失败: $e');
return PermissionStatus.denied;
}
}
// 打开应用设置页面(让用户手动开启权限)
Future<void> openSettings() async {
try {
AppSettings.openAppSettings(
type: AppSettingsType.notification,
);
} catch (e) {
print('打开设置页面失败: $e');
}
}
// 检查是否有通知权限的便捷方法
// Future<bool> hasNotificationPermission() async {
// final status = await checkNotificationPermission();
// return status.isGranted || status.isLimited;
// }
// 获取权限状态描述
String getPermissionStatusText() {
switch (notificationStatus.value) {
case PermissionStatus.granted:
return '已开启';
case PermissionStatus.denied:
return '已拒绝';
case PermissionStatus.restricted:
return '受限制';
case PermissionStatus.limited:
return '部分授权';
case PermissionStatus.permanentlyDenied:
return '永久拒绝';
case PermissionStatus.provisional:
return '临时授权';
}
}
// 获取权限状态颜色
String getPermissionStatusColor() {
switch (notificationStatus.value) {
case PermissionStatus.granted:
return '绿色';
case PermissionStatus.denied:
return '橙色';
case PermissionStatus.restricted:
return '红色';
case PermissionStatus.limited:
return '蓝色';
case PermissionStatus.permanentlyDenied:
return '红色';
case PermissionStatus.provisional:
return '黄色';
}
}
}