Flutter如何处理scheme打开app
在Flutter中如何实现通过URL scheme打开APP的功能?我想让用户点击特定格式的链接时(比如myapp://home)能够直接跳转到我的Flutter应用,并传递参数到指定页面。具体应该怎么配置Android和iOS的原生端?Flutter层又该如何接收和处理这些scheme参数?有没有完整的实现示例或最佳实践?
2 回复
Flutter通过uni_links插件处理scheme打开应用。在AndroidManifest.xml和Info.plist中配置scheme,监听getInitialLink和linkStream实现页面跳转。
更多关于Flutter如何处理scheme打开app的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中处理scheme打开应用主要通过以下步骤实现:
1. 配置Android清单文件
在android/app/src/main/AndroidManifest.xml中添加intent过滤器:
<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" />
</intent-filter>
</activity>
2. 配置iOS Info.plist
在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. 使用uni_links包处理路由
安装依赖:
dependencies:
uni_links: ^0.5.1
在Flutter代码中处理:
import 'package:uni_links/uni_links.dart';
class _MyAppState extends State<MyApp> {
StreamSubscription _sub;
@override
void initState() {
super.initState();
_handleInitialUri();
_sub = getUriLinksStream().listen(_handleUri);
}
void _handleInitialUri() async {
try {
final uri = await getInitialUri();
if (uri != null) _navigate(uri);
} catch (e) {
print('Initial uri error: $e');
}
}
void _handleUri(Uri uri) {
_navigate(uri);
}
void _navigate(Uri uri) {
// 解析uri并跳转到对应页面
if (uri.path == '/detail') {
Navigator.push(context, MaterialPageRoute(
builder: (context) => DetailPage(id: uri.queryParameters['id']),
));
}
}
@override
void dispose() {
_sub?.cancel();
super.dispose();
}
}
使用示例
在浏览器或其它应用中通过链接打开:
yourapp://detail?id=123
注意事项
- 测试时确保完全关闭应用后再通过链接打开
- 不同平台可能需要不同的配置方式
- 建议对uri进行有效性验证
这样就能实现通过scheme链接打开Flutter应用并跳转到指定页面的功能。

