Flutter如何实现deep links配置
在Flutter项目中配置deep links时遇到问题,按照官方文档添加了AndroidManifest.xml和Info.plist的相关配置,但点击链接后无法正常跳转到指定页面。具体表现为:
- Android端测试时,链接只能在浏览器打开,无法直接启动App
- iOS端报错"Could not find matching handler for deep link"
- 已确认使用了uni_links插件并正确初始化路由
请问完整的deep links配置流程应该是怎样的?是否需要额外处理应用冷启动场景?如何验证配置是否生效?
2 回复
Flutter中配置deep links需在pubspec.yaml添加flutter_deeplinking插件,并在AndroidManifest.xml和Info.plist中分别配置intent filters与URL schemes。通过onGenerateRoute处理路由逻辑。
更多关于Flutter如何实现deep links配置的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中配置deep links(深度链接)主要涉及两个平台的配置和Flutter代码处理。以下是具体步骤:
1. Android配置
修改 android/app/src/main/AndroidManifest.xml:
<activity
android:name=".MainActivity"
android:launchMode="singleTop">
<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="yourapp"
android:host="example.com" />
</intent-filter>
</activity>
2. iOS配置
修改 ios/Runner/Info.plist:
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLName</key>
<string>yourapp</string>
<key>CFBundleURLSchemes</key>
<array>
<string>yourapp</string>
</array>
</dict>
</array>
3. Flutter代码处理
使用 uni_links 包:
在 pubspec.yaml 中添加依赖:
dependencies:
uni_links: ^0.5.1
主要代码实现:
import 'package:uni_links/uni_links.dart';
class DeepLinkHandler {
StreamSubscription? _sub;
void initDeepLinks() {
// 处理初始链接
getInitialLink().then(_handleLink);
// 监听链接变化
_sub = linkStream.listen(_handleLink, onError: (err) {
// 处理错误
});
}
void _handleLink(String? link) {
if (link != null) {
// 解析链接并导航到对应页面
Uri uri = Uri.parse(link);
String path = uri.path;
Map<String, String> params = uri.queryParameters;
// 根据路径和参数进行页面跳转
_navigateToScreen(path, params);
}
}
void _navigateToScreen(String path, Map<String, String> params) {
// 实现页面导航逻辑
if (path.contains('/product')) {
// 跳转到商品详情页
String productId = params['id'] ?? '';
// Navigator.push(...);
}
}
void dispose() {
_sub?.cancel();
}
}
4. 使用示例
在 main.dart 中初始化:
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
final DeepLinkHandler _deepLinkHandler = DeepLinkHandler();
@override
void initState() {
super.initState();
_deepLinkHandler.initDeepLinks();
}
@override
void dispose() {
_deepLinkHandler.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: HomePage(),
);
}
}
注意事项:
- 测试时使用完整链接格式:
yourapp://example.com/path?param=value - 确保Android和iOS的配置正确
- 处理冷启动和热启动场景
- 考虑应用未安装时的处理方案
这样就完成了Flutter中deep links的基本配置。

