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

如何唤起含应用列表的底部弹窗,让用户选择打开URL/地图的应用?

问题解决:唤起应用选择弹窗打开地理链接

原代码的核心问题是finally块无条件执行谷歌地图专属链接,直接跳过了应用选择逻辑;同时externalApplication模式可能直接调用默认应用,导致弹窗不出现。以下是修正方案:

修正后的代码

try {
  await launchUrl(
    Uri.parse("geo:${taskAddress.lat},${taskAddress.lng}"),
    // 使用系统默认模式,会自动触发应用选择器(若有多个支持应用)
    mode: LaunchMode.platformDefault,
  );
} catch (e) {
  // 无支持应用时的降级处理,比如打开谷歌地图网页版
  await launchUrl(Uri.parse("https://www.google.com/maps?q=${taskAddress.lat},${taskAddress.lng}"));
}

关键修改说明

  • 移除finally块的强制跳转:原代码中finally里的google.navigation:是谷歌地图专属scheme,会直接启动谷歌地图,完全覆盖了geo:的应用选择逻辑,必须删除。
  • 使用通用geo: scheme:这是系统标准的地理定位协议,所有主流地图应用(谷歌地图、高德、百度等)都会注册该scheme,系统检测到多个支持应用时会自动弹出选择弹窗。
  • 错误降级处理:如果设备没有任何支持geo:的应用,捕获异常后跳转谷歌地图网页版,保证功能可用。

强制弹出选择器(可选)

如果希望即使有默认地图应用,也强制弹出选择弹窗,可添加Android专属配置:

try {
  await launchUrl(
    Uri.parse("geo:${taskAddress.lat},${taskAddress.lng}"),
    mode: LaunchMode.externalApplication,
    androidLaunchOptions: AndroidLaunchOptions(
      intentFlags: [
        IntentFlag.activityNewTask,
        IntentFlag.activityMultipleTask,
      ],
    ),
  );
} catch (e) {
  await launchUrl(Uri.parse("https://www.google.com/maps?q=${taskAddress.lat},${taskAddress.lng}"));
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 13:45:51