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
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 '黄色';
|
|
}
|
|
}
|
|
}
|