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

