Flutter的permission_handler插件检查iOS的通知权限不准确

文章底部有更新

今天,做好了一个功能,就是在app内检查用户有没有给当前APP打开通知权限,

如果没打开,就展示一个 banner ,让用户去点击banner去打开权限 。

android上测试得非常顺利,

结果,

在iOS 上就是不行,不管怎么打开关闭通知,使用 

Permission.notification.status 获取到的结果一直是: PermissionStatus.denied

我去,这也太坑了, 通过咨询AI大神,得出结论: 

这这这,  不准确也不解决一下吗? 真的无语了。 

解决办法:

  Future<bool> checkIOSNotificationsStatus() async {
    final FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin =
    FlutterLocalNotificationsPlugin();
    final bool? granted = await flutterLocalNotificationsPlugin
        .resolvePlatformSpecificImplementation<IOSFlutterLocalNotificationsPlugin>()
        ?.requestPermissions(alert: true, badge: true, sound: true
Flutter 开发中,使用 `permission_handler` 插件可以方便地处理运行时权限请求,特别是在需要访问相册等敏感资源时。为了提高代码的可维护性和复用性,通常会将权限请求逻辑封装到一个工具类中。以下是一个封装 `permission_handler` 请求相册权限的工具类示例: ### ### 工具类封装示例 ```dart import 'package:permission_handler/permission_handler.dart'; class PermissionUtils { // 请求相册权限 static Future<bool> requestPhotosPermission() async { final status = await Permission.photos.request(); return status.isGranted; } // 检查相册权限是否已授予 static Future<bool> checkPhotosPermissionGranted() async { final status = await Permission.photos.status; return status.isGranted; } // 请求多个权限 static Future<bool> requestMultiplePermissions(List<Permission> permissions) async { final statuses = await permissions.request(); return statuses.values.every((status) => status.isGranted); } } ``` ### ### 使用示例 在实际使用中,可以通过调用工具类中的方法来请求权限: ```dart import 'package:flutter/material.dart'; import 'package:your_project/utils/permission_utils.dart'; class PhotoPage extends StatelessWidget { Future<void> _requestPermission() async { bool granted = await PermissionUtils.requestPhotosPermission(); if (granted) { // 权限已授予,执行访问相册的操作 print('相册权限已授予'); } else { // 权限被拒绝或未被授予 print('相册权限未被授予'); } } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('相册权限示例'), ), body: Center( child: ElevatedButton( onPressed: _requestPermission, child: Text('请求相册权限'), ), ), ); } } ``` ### ### 注意事项 1. **权限声明**:在 Android 平台上,即使使用了 `permission_handler` 插件,仍需在 `AndroidManifest.xml` 文件中声明所需的权限。例如,访问相册可能需要以下权限声明: ```xml <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> ``` 2. **iOS 权限描述**:在 iOS 平台上,需要在 `Info.plist` 文件中添加权限描述,例如: ```xml <key>NSPhotoLibraryUsageDescription</key> <string>需要访问您的相册以选择图片</string> ``` 通过上述工具类,可以更高效地管理权限请求逻辑,并确保代码结构清晰、易于维护。这种方法仅适用于相册权限,还可以扩展到其他类型的权限请求。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值