Flutter Url Launcher未触发错误页面问题求助
问题分析与解决方案
你的代码里有两个核心问题导致错误页无法正常跳转:
- 用
throw触发页面跳转完全错误,throw是用来抛出异常的,不是执行导航逻辑的,这会让代码逻辑异常中断,根本走不到导航步骤。 Uri.parse('adjja')生成的是相对路径URI,launchUrl对这种情况的判定逻辑可能不会返回false,导致后续的错误处理代码没机会执行。
修正后的完整代码
class DetailPage extends StatelessWidget { @override Widget build(BuildContext context) { final Uri _url = Uri.parse('adjja'); final Uri _wa = Uri.parse('https://wa.me/62895378147657'); Future<void> _launchUrl() async { // 先判断URI是否为有效绝对路径 if (!_url.isAbsolute) { Navigator.push( context, MaterialPageRoute(builder: (context) => ErrorPage()) ); return; } try { bool launched = await launchUrl(_url); // 启动失败则跳转错误页 if (!launched) { Navigator.push( context, MaterialPageRoute(builder: (context) => ErrorPage()) ); } } catch (e) { // 捕获启动时的异常(比如无对应应用处理URI),跳转错误页 Navigator.push( context, MaterialPageRoute(builder: (context) => ErrorPage()) ); } } // 补充原代码缺失的页面渲染部分 return Scaffold( body: Center( child: ElevatedButton( onPressed: _launchUrl, child: const Text('打开链接'), ), ), ); } }
关键修正说明
- 删掉
throw,直接在条件满足时调用Navigator.push执行跳转,这才是正确的页面导航方式。 - 增加
_url.isAbsolute检查,直接拦截像'adjja'这种无效的相对URI,提前触发错误页。 - 用
try-catch包裹launchUrl,捕获它可能抛出的异常(比如设备上没有能处理该URI的应用),确保任何异常场景下都能跳转到错误页。 - 补充了原代码缺失的Widget返回部分,保证页面能正常渲染运行。
内容的提问来源于stack exchange,提问作者Nio Zihni
相关产品推荐
相关产品推荐

