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

如何在Flutter中创建含用户ID的动态链接并获取数据?

Flutter实现project.com/user/<userid>动态链接并获取用户数据

要实现这种带userid的动态链接,主要分创建符合格式的链接和在Flutter里解析链接并拉取数据两步来做:

一、生成project.com/user/<userid>格式的链接

1. 配置域名的深度链接支持

得让系统识别你的域名能唤起App:

  • iOS端:在Info.plist里配置CFBundleURLTypes和NSUserActivityTypes,将project.com设为关联域名。
  • Android端:在AndroidManifest.xml中添加<intent-filter>,指定对应规则:
<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <data
        android:scheme="https"
        android:host="project.com"
        android:pathPattern="/user/.*" />
</intent-filter>

2. 构造动态链接

不管是后端生成还是前端直接拼接,直接生成https://project.com/user/${userId}格式的字符串即可。如果需要短链生成、跳转统计这类功能,可以用Firebase Dynamic Links这类服务,但核心链接结构保持不变。

二、在Flutter里解析链接获取userid

推荐用uni_links包处理深度链接,步骤如下:

1. 安装依赖

在pubspec.yaml中添加:

dependencies:
  uni_links: ^0.5.1

执行flutter pub get完成安装。

2. 监听链接并解析userid

在App入口(比如main.dart)初始化监听,拿到链接后提取userid:

import 'package:uni_links/uni_links.dart';
import 'package:flutter/material.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  // 启动时获取初始链接
  final initialLink = await getInitialLink();
  if (initialLink != null) {
    _parseLink(initialLink);
  }
  // 监听后续的链接跳转
  linkStream.listen((String? link) {
    if (link != null) {
      _parseLink(link);
    }
  });
  runApp(const MyApp());
}

void _parseLink(String link) {
  final uri = Uri.parse(link);
  final pathParts = uri.pathSegments;
  // 校验路径是否符合/user/<userid>格式
  if (pathParts.length >= 2 && pathParts[0] == 'user') {
    final userId = pathParts[1];
    // 拿到userid后调用接口拉取对应数据
    _fetchUserData(userId);
  }
}

void _fetchUserData(String userId) {
  // 这里编写网络请求逻辑,比如用http或dio包
  print('开始获取用户ID $userId 的数据');
  // 示例请求代码:
  // final response = await http.get(Uri.parse('https://你的接口地址/users/$userId'));
  // if (response.statusCode == 200) {
  //   final userData = jsonDecode(response.body);
  //   // 处理并展示用户数据
  // }
}

3. 路由直接解析参数(可选)

如果你的App使用命名路由,也可以在路由配置中直接解析:

MaterialApp(
  onGenerateRoute: (settings) {
    if (settings.name?.startsWith('/user/') ?? false) {
      final userId = settings.name!.split('/')[2];
      return MaterialPageRoute(
        builder: (context) => UserProfilePage(userId: userId),
      );
    }
    // 其他路由的处理逻辑
    return null;
  },
);

在UserProfilePage中通过构造函数接收userId,再发起数据请求即可。

内容的提问来源于stack exchange,提问作者Ivan Raphel Jaison

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 05:40:26