Flutter在main函数调用permission_handler获取权限时报空校验错误
问题原因
- 核心触发点:async修饰的main函数中调用依赖原生通道的插件逻辑前,未初始化Flutter组件绑定。permission_handler权限请求依赖原生MethodChannel实现,Flutter引擎初始化完成前调用相关方法,会触发空值上使用空检查运算符的异常。
- 代码写法存在不规范:
request()方法本身返回Future<PermissionStatus>类型,不需要单独存储Future对象再等待其属性,可直接await获取权限状态。
修正代码
import 'package:flutter/widgets.dart'; import 'package:permission_handler/permission_handler.dart'; void main() async { // 必须优先初始化组件绑定,保证原生交互通道可用 WidgetsFlutterBinding.ensureInitialized(); final permissionStatus = await Permission.manageExternalStorage.request(); if (permissionStatus.isGranted) { // 权限授予后的业务逻辑 } }
额外注意事项
- 安卓端需要在
android/app/src/main/AndroidManifest.xml中添加权限声明:
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
若适配安卓13及以上系统,还需根据实际存储访问场景补充图片、音频、视频对应的细分权限声明。
- iOS端若需要访问存储,需在项目
Info.plist中添加对应权限的使用描述字段。
内容的提问来源于stack exchange,提问作者tluanga hauhnar
相关产品推荐
相关产品推荐

