flutter如何实现deeplink功能
在Flutter中如何实现DeepLink功能?需要支持Android和iOS平台,能否提供一个完整的实现示例?具体需要配置哪些文件和代码?如何处理动态链接的参数传递和路由跳转?
2 回复
在Flutter中实现DeepLink功能需以下步骤:
- 配置AndroidManifest.xml和Info.plist,添加URL Scheme和Intent Filter。
- 使用
uni_links或url_launcher包处理链接。 - 在Flutter中监听链接事件,解析参数并导航到对应页面。
示例代码:
import 'package:uni_links/uni_links.dart';
void initUniLinks() {
getInitialLink().then((uri) {
// 处理初始链接
});
linkStream.listen((uri) {
// 处理后续链接
});
}
更多关于flutter如何实现deeplink功能的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中实现DeepLink(深度链接)功能主要涉及以下几个步骤:
1. 添加依赖
在 pubspec.yaml 中添加 uni_links 插件:
dependencies:
uni_links: ^0.5.1
运行 flutter pub get 安装。
2. 配置平台
-
Android:
在AndroidManifest.xml的<activity>标签内添加intent-filter:<intent-filter android:autoVerify="true"> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="yourapp" android:host="example" /> </intent-filter> -
iOS:
在Info.plist中添加CFBundleURLTypes:<key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLName</key> <string>yourapp</string> <key>CFBundleURLSchemes</key> <array> <string>yourapp</string> </array> </dict> </array>
3. 处理链接
在Flutter代码中监听和处理链接:
import 'package:uni_links/uni_links.dart';
import 'package:flutter/services.dart';
String? _initialLink;
StreamSubscription? _sub;
@override
void initState() {
super.initState();
initUniLinks();
}
Future<void> initUniLinks() async {
// 获取初始链接
try {
_initialLink = await getInitialLink();
if (_initialLink != null) {
_handleLink(_initialLink!);
}
} on PlatformException catch (e) {
print("初始链接错误: $e");
}
// 监听链接变化
_sub = linkStream.listen((String? link) {
if (link != null) _handleLink(link);
}, onError: (err) {
print("链接监听错误: $err");
});
}
void _handleLink(String link) {
// 解析链接并跳转到对应页面
print("处理链接: $link");
// 例如:yourapp://product/123 -> 跳转到商品详情页
}
@override
void dispose() {
_sub?.cancel();
super.dispose();
}
4. 测试链接
- 安卓:
adb shell am start -W -a android.intent.action.VIEW -d "yourapp://example/product/123" - iOS:在Safari中输入
yourapp://example测试
注意事项:
- 确保链接格式与配置的
scheme和host一致 - 处理冷启动(
getInitialLink)和热启动(linkStream)场景 - 对于Web环境,需使用
url_launcher配合处理
通过以上步骤,即可在Flutter应用中实现基本的DeepLink功能。

