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
相关产品推荐
相关产品推荐

