Flutter url_launcher插件返回崩溃:Receiver not registered异常
问题解决:url_launcher返回时应用崩溃(Receiver not registered)
核心原因
报错java.lang.IllegalArgumentException: Receiver not registered是因为url_launcher内置的WebViewActivity在销毁阶段,尝试注销一个未完成注册的广播接收器,属于插件内部生命周期同步问题。当前插件默认使用内置WebView打开链接而非外部浏览器,才触发了这个bug。
快速解决方案
1. 强制唤起外部浏览器(推荐)
调用launchUrl时指定LaunchMode.externalApplication,跳过插件内置WebView,直接用系统默认浏览器打开链接,从根源规避WebViewActivity的销毁异常:
import 'package:url_launcher/url_launcher.dart'; // 打开链接的方法 Future<void> launchExternalUrl(String url) async { final Uri uri = Uri.parse(url); if (await canLaunchUrl(uri)) { await launchUrl( uri, mode: LaunchMode.externalApplication, // 强制用外部浏览器 ); } }
2. 升级url_launcher到最新稳定版
该bug可能已在后续版本中修复,更新pubspec.yaml中的插件版本:
dependencies: url_launcher: ^6.2.5 # 替换为最新稳定版
执行flutter pub get后重新测试。
3. (备选)排查页面重建时的状态问题
如果必须使用内置WebView,可检查页面的dispose方法是否有干扰插件生命周期的逻辑,同时确保在页面重建时,url_launcher的异步调用已正确取消或完成。不过此方法复杂度较高,优先推荐前两种方案。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

