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

Flutter Deeplink如何传递参数并实现带参页面路由?

Flutter DeepLink动态参数路由实现方案

问题根源

静态路由(如/signup)正常跳转,但/course/:courseId这类带参数的动态路由失效,核心原因是未解析DeepLink路径中的参数,也未实现带参数的路由导航逻辑——当前_handleLink方法仅打印链接,未处理动态路由场景。

解决方案

1. 重构DeepLink处理逻辑

修改_handleLink方法,解析Uri路径片段,提取参数并完成带参导航:

static void _handleLink(String? link, BuildContext context) {
  if (link == null) return;
  
  final Uri deepLink = Uri.parse(link);
  final pathSegments = deepLink.pathSegments;

  print('DeepLink received: $deepLink');

  // 处理单段静态路由
  if (pathSegments.length == 1) {
    switch (pathSegments.first) {
      case 'signup':
        Navigator.pushNamed(context, '/signup');
        break;
      // 可添加其他静态路由分支
    }
  }
  // 处理带参数的动态路由(如/course/123)
  else if (pathSegments.length == 2 && pathSegments[0] == 'course') {
    final courseId = pathSegments[1];
    // 向课程页传递参数
    Navigator.pushNamed(
      context,
      '/course',
      arguments: {'courseId': courseId},
    );
  }
  // 可扩展更多动态路由规则,如多层嵌套路径
}

2. 配置路由表支持参数接收

在MaterialApp的路由表中,确保课程页能正确获取传递的参数:

MaterialApp(
  initialRoute: '/',
  routes: {
    '/signup': (_) => const SignupPage(),
    '/course': (context) {
      // 提取路由参数
      final args = ModalRoute.of(context)?.settings.arguments as Map<String, dynamic>?;
      return CoursePage(courseId: args?['courseId'] ?? '');
    },
  },
);

3. 验证Android配置(无需修改,仅确认)

你的Android Intent Filter已正确配置,<data>标签覆盖了http/https scheme和domain.com host,默认会匹配所有子路径,无需额外添加pathPattern。

测试方法

用adb命令直接触发动态DeepLink测试:

adb shell am start -W -a android.intent.action.VIEW -d "https://domain.com/course/456" com.your.app.package

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 20:55:29