Flutter深度链接管理插件sa_deeplink_lego的使用
Flutter深度链接管理插件sa_deeplink_lego的使用
sa_deeplink_lego
deep link dto template under simple architecture framework.
安装
-
在lego项目的根目录打开终端,输入以下命令以安装CLI。如果你还没有一个lego项目,可以创建一个新的。
flutter pub global activate lego_cli lego create
-
在终端中,输入以下命令将lego添加到项目中。
lego add sa_deeplink_lego
使用
-
将蓝图文件夹中的所有
New
替换为你自己的DTO名称。 -
将
_new.dart
替换为你的DTO文件名。 -
复制
lib/blueprint/deeplink
文件夹下的所有文件到你的应用文件夹。 -
生成深度链接
String url = NewDeepLink.buildLink( 'https://deeplinktest.junestory.com', New() ..docId = 'angel' ..s000 = 'sky'); print(url);
-
当你在手机上点击该链接时,应用将会打开,并且会调用
lib/app/frontend/listener/deeplink/[你的DTO名称].dart
文件中的ReceiveNewDeepLinkData
函数,传入DTO数据。
示例代码
import 'package:sa_deeplink_lego/sa_deeplink_lego.dart';
void main() {
// 生成深度链接
String url = NewDeepLink.buildLink(
'https://deeplinktest.junestory.com',
New()
..docId = 'angel'
..s000 = 'sky');
print(url);
// 接收并处理深度链接数据
void receiveDeepLink(New deepLinkData) {
// 这里可以根据实际需求处理接收到的数据
print('Received deep link data: $deepLinkData');
}
}
深度链接接收器示例
在lib/app/frontend/listener/deeplink/new_deep_link_listener.dart
文件中,你可以实现类似以下的代码来接收和处理深度链接:
import 'package:sa_deeplink_lego/sa_deeplink_lego.dart';
class NewDeepLinkListener {
void receiveDeepLink(New deepLinkData) {
// 这里可以根据实际需求处理接收到的数据
print('Received deep link data: $deepLinkData');
}
}
更多关于Flutter深度链接管理插件sa_deeplink_lego的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter深度链接管理插件sa_deeplink_lego的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
sa_deeplink_lego
是一个用于管理 Flutter 应用深度链接的插件。它可以帮助你处理应用内的深度链接,允许用户通过点击链接直接跳转到应用的特定页面。以下是 sa_deeplink_lego
的基本使用步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 sa_deeplink_lego
插件的依赖:
dependencies:
flutter:
sdk: flutter
sa_deeplink_lego: ^latest_version
然后运行 flutter pub get
来获取依赖。
2. 配置深度链接
在 AndroidManifest.xml
和 Info.plist
文件中配置深度链接。
Android
在 AndroidManifest.xml
文件中添加以下内容:
<activity
android:name=".MainActivity"
android:launchMode="singleTask">
<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="your_scheme" android:host="your_host" />
</intent-filter>
</activity>
iOS
在 Info.plist
文件中添加以下内容:
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string>your_bundle_id</string>
<key>CFBundleURLSchemes</key>
<array>
<string>your_scheme</string>
</array>
</dict>
</array>
3. 初始化插件
在你的 Flutter 应用的 main.dart
文件中初始化 sa_deeplink_lego
:
import 'package:sa_deeplink_lego/sa_deeplink_lego.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// Initialize the deeplink plugin
await SADeepLinkLego.initialize();
runApp(MyApp());
}
4. 监听深度链接
你可以在应用的任何地方监听深度链接事件。通常,你可以在 initState
方法中监听:
class MyApp extends StatefulWidget {
[@override](/user/override)
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
StreamSubscription? _deeplinkSubscription;
[@override](/user/override)
void initState() {
super.initState();
// Listen for deeplink events
_deeplinkSubscription = SADeepLinkLego.onLink.listen((String link) {
// Handle the deeplink
print('Received deeplink: $link');
// Navigate to the appropriate screen based on the link
if (link.contains('/product')) {
Navigator.push(context, MaterialPageRoute(builder: (context) => ProductPage()));
} else if (link.contains('/profile')) {
Navigator.push(context, MaterialPageRoute(builder: (context) => ProfilePage()));
}
});
}
[@override](/user/override)
void dispose() {
_deeplinkSubscription?.cancel();
super.dispose();
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
home: HomePage(),
);
}
}
5. 处理深度链接
在 onLink
回调中,你可以根据接收到的深度链接字符串来决定导航到哪个页面。例如,如果链接是 your_scheme://your_host/product/123
,你可以解析这个链接并导航到产品页面。
6. 测试深度链接
你可以通过以下方式测试深度链接:
-
Android:使用
adb
命令模拟深度链接:adb shell am start -W -a android.intent.action.VIEW -d "your_scheme://your_host/product/123" com.your.package.name
-
iOS:在 Safari 中输入深度链接,例如
your_scheme://your_host/product/123
,然后点击打开。
7. 处理冷启动和热启动
sa_deeplink_lego
会自动处理应用的冷启动和热启动时的深度链接。在冷启动时,深度链接会在应用初始化后立即传递到 onLink
流中。在热启动时,深度链接会立即传递给 onLink
流。
8. 处理错误
你可以通过 onError
流来处理深度链接的错误:
SADeepLinkLego.onError.listen((error) {
print('Deeplink error: $error');
});
9. 清理资源
在 dispose
方法中取消订阅,以防止内存泄漏:
[@override](/user/override)
void dispose() {
_deeplinkSubscription?.cancel();
super.dispose();
}