You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter应用在iOS 18模拟器中调用URL后出现卡顿无响应问题

Flutter应用在iOS 18模拟器中使用url_launcher(及内嵌浏览器功能)后卡顿无响应

问题详情

我开发的Flutter应用在Android和旧版iOS系统上运行正常,但在iOS 18模拟器中测试时,出现以下问题:

  • 使用url_launcher包打开URL后,URL能正常打开,但应用随即卡顿失去响应,必须停止模拟器才能继续操作
  • 谷歌登录(启动内嵌浏览器)、Stripe PayPal结账功能也出现同样的卡顿现象

用于启动URL的代码:

Future<void> _launchURL(Uri url) async {
  if (await canLaunchUrl(url)) {
    await launchUrl(url);
  } else {
    throw 'Could not launch $url';
  }
}

复现步骤

  • 在Flutter应用中安装url_launcher: ^6.3.0
  • 实现上述URL启动逻辑
  • 在iOS 18模拟器中运行应用
  • 触发URL打开操作

环境信息

  • Flutter: 3.24.3(稳定分支)
  • iOS Simulator: iOS 18
  • url_launcher: ^6.3.0

预期与实际行为

  • 预期:URL正常打开,应用保持响应状态
  • 实际:URL成功打开,但应用随即卡顿并失去响应

解决建议

  1. 升级url_launcher到最新版本
    当前使用的url_launcher: ^6.3.0可能未适配iOS 18,修改pubspec.yaml将依赖更新至pub.dev上的最新稳定版,执行flutter pub get完成升级,新版本大概率包含针对iOS 18的兼容性修复。

  2. 指定URL启动模式
    尝试给launchUrl添加mode参数,强制使用外部浏览器打开URL,规避内嵌WebView在iOS 18模拟器上的兼容性问题:

    await launchUrl(
      url,
      mode: LaunchMode.externalApplication,
    );
    
  3. 升级Flutter框架
    Flutter 3.24.3发布时iOS 18尚处于测试阶段,框架可能未完全适配该系统。执行flutter upgrade将Flutter更新到支持iOS 18的最新稳定版本。

  4. 修复iOS模拟器问题
    iOS 18模拟器本身可能存在bug,可尝试以下操作:

    • 重启模拟器(通过菜单栏Hardware > Restart)
    • 重置模拟器内容与设置(Hardware > Erase All Content and Settings)
    • 更新Xcode到支持iOS 18的最新版本,确保模拟器环境为最新状态
  5. 排查线程阻塞问题
    虽然代码为异步实现,但可尝试将launchUrl调用放在单独的隔离中执行,避免主线程被意外阻塞:

    await compute((Uri url) async {
      if (await canLaunchUrl(url)) {
        await launchUrl(url);
      }
    }, url);
    

内容的提问来源于stack exchange,提问作者Constantin Pinkl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 19:52:18