Flutter应用申请外部存储权限后崩溃,求解决方案
问题解决:权限允许后应用崩溃(Reply already submitted)
错误原因
这个IllegalStateException: Reply already submitted错误是Flutter MethodChannel的回调冲突导致的——当权限请求的结果返回时,对应的回调已经被提交过一次,或者当前页面状态已失效(比如页面已销毁),无法处理回复。
具体修复方案
防止重复发起权限请求
加一个状态变量标记是否正在请求权限,避免多次触发请求导致冲突:bool _isRequesting = false; Future<void> askForPermissions() async { if (_isRequesting) return; _isRequesting = true; try { final result = await [ Permission.storage, Permission.manageExternalStorage ].request(); // 这里处理权限结果 } finally { _isRequesting = false; } }检查页面挂载状态
在发起请求前确认页面还处于挂载状态,避免页面销毁后回调无法处理:Future<void> askForPermissions() async { if (!mounted) return; final result = await [ Permission.storage, Permission.manageExternalStorage ].request(); // 处理权限结果 }升级permission_handler库
部分旧版本的permission_handler存在这个已知bug,更新到最新稳定版即可修复。修改pubspec.yaml:permission_handler: ^10.2.0 # 替换为当前最新稳定版本避免在build方法中发起请求
build方法会频繁执行,直接在这里调用权限请求会导致重复触发,应该放在initState、用户点击事件等只会执行一次或受控的时机。
内容的提问来源于stack exchange,提问作者ILM
相关产品推荐
相关产品推荐

