Flutter iOS使用permission_handler 10.0.0未弹出位置权限弹窗的解决求助
解决方案:iOS端permission_handler 10.0.0不弹出位置权限弹窗
1. 修正代码逻辑的异步执行问题
你当前的代码在权限请求后直接打印固定信息,无法准确判断请求是否执行、弹窗是否触发。修改代码,在请求后重新获取权限状态并输出:
chkPermissionLoc(ctx) async { var perLocation = await Permission.location.status; if (perLocation.isDenied) { // 发起权限请求并获取结果 final status = await Permission.location.request(); // 根据新状态输出日志 if (status.isGranted) { print('权限已授予'); } else if (status.isDenied) { print('权限仍被拒绝'); } else if (status.isPermanentlyDenied) { print('权限被永久拒绝'); } } else if (perLocation.isGranted) { print('权限已授予'); } else if (perLocation.isPermanentlyDenied) { print('权限被永久拒绝'); } else if (perLocation.isRestricted) { print('权限被系统限制'); } else if (perLocation.isLimited) { print('权限为有限授权'); } }
2. 确认Info.plist配置的有效性
- 确保修改的是Runner目标下的
Info.plist:打开Xcode,选中Runner项目,在Info标签页查看权限描述是否正确存在,键名需严格匹配(大小写敏感)。 - 匹配权限类型与配置键:你请求的
Permission.location对应NSLocationWhenInUseUsageDescription,该配置是必需项,其他多余的权限描述键可保留但不影响当前功能。
3. 清理iOS构建缓存并重新构建
缓存可能导致配置不生效,按以下步骤操作:
- 关闭Xcode和Flutter项目。
- 删除iOS目录下的
Pods文件夹与Podfile.lock文件。 - 执行
flutter clean清理Flutter缓存。 - 进入iOS目录执行
pod install重新安装依赖。 - 重新运行Flutter项目。
4. 处理永久拒绝的情况
如果用户之前拒绝权限时勾选了「不再询问」,系统不会再弹出弹窗,需引导用户前往设置开启:
if (perLocation.isPermanentlyDenied) { await openAppSettings(); // 需导入permission_handler,此方法会打开应用设置页面 }
内容的提问来源于stack exchange,提问作者Serenity
相关产品推荐
相关产品推荐

