Flutter中url_launcher调用Apple Maps在iOS端崩溃问题排查
排查iOS上maps_launcher触发PlatformException的问题
可能的原因及排查步骤:
URL格式异常
报错中的URL末尾带有多余的+号,这大概率是maps_launcher生成URL时的编码错误。虽然Apple Maps能兼容解析该URL,但url_launcher的底层校验会判定其为无效请求并抛出异常。- 测试方法:手动复制报错里的URL,用
url_launcher直接调用launchUrl,观察是否同样抛出异常。如果是,说明问题出在URL本身,需要确认maps_launcher的编码逻辑是否存在字符处理漏洞(比如地址末尾的空格未截断就直接编码)。
- 测试方法:手动复制报错里的URL,用
插件与url_launcher的API适配问题
maps_launcher 2.2.0可能未完全适配url_launcher 6.1.12的回调逻辑。比如url_launcher在打开外部应用后,返回的状态可能被maps_launcher误判为错误:- 查看插件实现:找到本地项目中
maps_launcher的iOS源码(路径通常为ios/.symlinks/plugins/maps_launcher/ios),检查它调用url_launcher的代码。比如是否在launch后错误地将非true的返回值直接抛出为PlatformException,忽略了iOS中切换应用后返回false但实际操作成功的情况。
- 查看插件实现:找到本地项目中
回调结果处理逻辑缺陷
即使Apple Maps成功打开,maps_launcher可能未正确处理url_launcher的异步回调结果。比如插件调用url_launcher时,没有捕获非致命错误,而是直接将所有错误抛给上层导致崩溃。
临时验证方案
- 手动构造正确的地址URL(去掉末尾多余的
+),用maps_launcher的自定义URL方法打开:
如果不再崩溃,说明确实是URL编码的问题。await MapsLauncher.launchUrl('https://maps.apple.com/?q=Merivale+Lane+Theatre+Rangi+Ruru+Girls+School+Merivale+Lane+off+Rossall+Street');
后续建议
- 尝试升级
maps_launcher到最新版本,看是否已修复该编码或适配问题; - 若升级无效,可向maps_launcher仓库提交Issue,附带你的地址案例和报错信息,帮助开发者定位问题。
内容的提问来源于stack exchange,提问作者Sarah K
相关产品推荐
相关产品推荐

