Flutter深度链接管理插件sa_deeplink_lego的使用

Flutter深度链接管理插件sa_deeplink_lego的使用

sa_deeplink_lego

deep link dto template under simple architecture framework.

安装

  1. 在lego项目的根目录打开终端,输入以下命令以安装CLI。如果你还没有一个lego项目,可以创建一个新的。

    flutter pub global activate lego_cli
    lego create
    
  2. 在终端中,输入以下命令将lego添加到项目中。

    lego add sa_deeplink_lego
    

使用

  1. 将蓝图文件夹中的所有New替换为你自己的DTO名称。

  2. _new.dart替换为你的DTO文件名。

  3. 复制lib/blueprint/deeplink文件夹下的所有文件到你的应用文件夹。

  4. 生成深度链接

    String url = NewDeepLink.buildLink(
       'https://deeplinktest.junestory.com',
       New()
         ..docId = 'angel'
         ..s000 = 'sky');
    print(url);
    
  5. 当你在手机上点击该链接时,应用将会打开,并且会调用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

1 回复

更多关于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.xmlInfo.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();
}
回到顶部