// 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 notificationStatus = PermissionStatus.denied.obs; final RxBool checking = false.obs; // 初始化时检查权限 @override void onInit() { super.onInit(); // 延迟检查,确保服务已初始化 checkPermission(); } // 检查通知权限状态 Future 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 requestNotificationPermission() async { try { final status = await Permission.notification.request(); notificationStatus.value = status; print('请求通知权限结果: $status'); return status; } catch (e) { print('请求通知权限失败: $e'); return PermissionStatus.denied; } } // 打开应用设置页面(让用户手动开启权限) Future openSettings() async { try { AppSettings.openAppSettings( type: AppSettingsType.notification, ); } catch (e) { print('打开设置页面失败: $e'); } } // 检查是否有通知权限的便捷方法 // Future 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 '黄色'; } } }