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

Flutter不使用Router处理深度链接:页面跳转问题求助

Flutter深度链接跳转页面问题及Firebase链接设置方案

问题描述

我在Flutter里开发深度链接功能,目前应用启动、获取深度链接参数都正常,但通过深度链接进入应用后,没法跳转到指定的MenuDetailPage。我用的是Navigator而非Router,希望配置Firebase链接后,打开链接能触发下面的跳转代码对应的页面:

Navigator.push(
  context,
  MaterialPageRoute(
    builder: (BuildContext context) => MenuDetailPage(
      name: snapshot.data!.data[index]!.name,
      product: snapshot.data!.data[index].id,
    ),
  ),
);

Firebase链接配置及处理方案

1. 配置带参数的动态链接

在Firebase控制台的动态链接页面创建新链接时,需要添加自定义参数传递跳转所需信息:

  • 短链接后缀可以保留你当前的start,也可以改成更直观的如menu-detail
  • 在链接参数(或“高级选项”-“自定义参数”)中添加:
    • product_id:对应跳转代码里的product参数(即商品ID,必填,用来定位具体商品)
    • 可选添加product_name:对应name参数,若后续能通过ID从接口拉取名称,此参数可省略

生成的完整链接示例:https://dummyapp.page.link/start?product_id=123&product_name=珍珠奶茶

2. 解析参数并触发跳转

在Flutter端获取到深度链接的Uri后,解析参数再调用Navigator跳转:

// 假设已通过Firebase动态链接SDK获取到Uri对象
Uri deepLinkUri = ...;
String? productId = deepLinkUri.queryParameters['product_id'];
String? productName = deepLinkUri.queryParameters['product_name'];

if (productId != null) {
  Navigator.push(
    context,
    MaterialPageRoute(
      builder: (context) => MenuDetailPage(
        name: productName ?? '默认名称',
        product: productId,
      ),
    ),
  );
}

3. 关键注意点

  • 确保应用冷启动(完全关闭后点击链接)和热启动(后台唤起)时,都能监听到深度链接事件,及时解析参数执行跳转
  • 若商品名称可通过product_id从后端接口获取,链接仅需传递product_id,减少链接复杂度
  • 测试时务必覆盖两种启动场景,避免漏处理后台唤起的情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 13:23:19