Flutter中通过Launcher URL无法打开邮件报null错误如何解决
Flutter 无法唤起邮件应用并抛出空错误修复方案
问题表现
- 调用Launcher URL相关API无法唤起系统邮件应用
- 代码运行过程中抛出null空错误
- 运行报错截图:

常见触发原因
- 未在Android、iOS原生配置中声明邮件scheme的查询权限,系统拦截跳转请求导致API返回null
- 代码中对
launchUrl/canLaunchUrl的返回值做了强制非空断言,权限不足、设备无可用邮件应用时直接触发空异常 - 拼接的mailto链接格式不合法,特殊字符未转义导致URI解析失败返回null
- 原生配置修改后未全量重新编译,仅用热重载/热重启加载导致配置不生效
修复步骤
- 确认依赖版本
在pubspec.yaml中引入稳定版url_launcher依赖:
dependencies: url_launcher: ^6.2.5
执行flutter pub get拉取依赖。
- 配置原生平台权限
- Android端:打开
android/app/src/main/AndroidManifest.xml,在<manifest>根节点下添加查询权限配置:
<queries> <intent> <action android:name="android.intent.action.SENDTO" /> <data android:scheme="mailto" /> </intent> </queries>
- iOS端:打开
ios/Runner/Info.plist,在根<dict>节点下添加scheme白名单:
<key>LSApplicationQueriesSchemes</key> <array> <string>mailto</string> </array>
- 编写安全的唤起逻辑
禁止对返回值做强制非空断言,必须先校验跳转可行性,参考实现:
Future<void> openEmail() async { final Uri mailUri = Uri( scheme: 'mailto', path: 'your_contact@xxx.com', // 替换为实际收件邮箱 queryParameters: { 'subject': '问题反馈', 'body': '请输入反馈内容:', }, ); try { if (await canLaunchUrl(mailUri)) { await launchUrl(mailUri); } } catch (e) { debugPrint('唤起邮件应用失败:$e'); // 此处可添加toast提示用户当前设备无可用邮件应用 } }
- 生效操作
关闭当前运行的应用,执行flutter clean清理构建缓存后,重新全量编译运行项目即可,原生配置修改不支持热重载生效。
内容的提问来源于stack exchange,提问作者user19196093
相关产品推荐
相关产品推荐

