Flutter深度链接处理插件deeplink_connect的使用

Flutter深度链接处理插件deeplink_connect的使用

开始使用

本项目是一个新的Flutter插件项目,旨在为Android和/或iOS平台提供特定的实现代码。此插件名为deeplink_connect,用于处理深度链接。

示例代码

以下是一个完整的示例代码,展示了如何在Flutter应用中使用deeplink_connect插件来处理深度链接。

import 'package:flutter/material.dart';
import 'package:deeplink_connect/deeplink_connect.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  // 用于存储深度链接响应信息
  String _deepLinkResponse = 'No response';
  
  // 初始化deeplink_connect实例
  final DeeplinkConnect _deeplinkConnect = DeeplinkConnect();

  @override
  void initState() {
    super.initState();
    // 初始化深度链接响应监听器
    _initDeepLinkResponseListener();
  }

  @override
  void dispose() {
    // 关闭deeplink_connect连接
    _deeplinkConnect.close();
    super.dispose();
  }

  // 初始化深度链接响应监听器
  void _initDeepLinkResponseListener() {
    _deeplinkConnect.onDeepLinkResponse?.listen((response) {
      setState(() {
        _deepLinkResponse = response;
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('插件示例应用'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              const SizedBox(height: 20),
              // 显示深度链接响应信息
              Text('深度链接响应: $_deepLinkResponse'),
            ],
          ),
        ),
        floatingActionButton: FloatingActionButton(
          onPressed: () async {
            // 构建URI字符串
            String uriString = DeeplinkPayment.build(
              authority: "pay",
              scheme: "payment-app",
              returnScheme: "return-pdv",
              amount: 1000,
              transactionType: TransactionType.credit,
            ).getUri();

            // 发送深度链接请求
            await _deeplinkConnect.send(uriString);
          },
          tooltip: '支付',
          child: const Icon(Icons.payment),
        ),
      ),
    );
  }
}

代码解释

  1. 导入依赖

    import 'package:flutter/material.dart';
    import 'package:deeplink_connect/deeplink_connect.dart';
    
  2. 初始化应用

    void main() {
      runApp(const MyApp());
    }
    
  3. 定义主应用状态类

    class MyApp extends StatefulWidget {
      const MyApp({super.key});
    
      @override
      State<MyApp> createState() => _MyAppState();
    }
    
  4. 定义应用状态

    class _MyAppState extends State<MyApp> {
      String _deepLinkResponse = 'No response'; // 存储深度链接响应信息
      final DeeplinkConnect _deeplinkConnect = DeeplinkConnect(); // 初始化deeplink_connect实例
    
      @override
      void initState() {
        super.initState();
        _initDeepLinkResponseListener(); // 初始化深度链接响应监听器
      }
    
      @override
      void dispose() {
        _deeplinkConnect.close(); // 关闭deeplink_connect连接
        super.dispose();
      }
    
      // 初始化深度链接响应监听器
      void _initDeepLinkResponseListener() {
        _deeplinkConnect.onDeepLinkResponse?.listen((response) {
          setState(() {
            _deepLinkResponse = response;
          });
        });
      }
    
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          home: Scaffold(
            appBar: AppBar(
              title: const Text('插件示例应用'),
            ),
            body: Center(
              child: Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: [
                  const SizedBox(height: 20),
                  // 显示深度链接响应信息
                  Text('深度链接响应: $_deepLinkResponse'),
                ],
              ),
            ),
            floatingActionButton: FloatingActionButton(
              onPressed: () async {
                // 构建URI字符串
                String uriString = DeeplinkPayment.build(
                  authority: "pay",
                  scheme: "payment-app",
                  returnScheme: "return-pdv",
                  amount: 1000,
                  transactionType: TransactionType.credit,
                ).getUri();
    
                // 发送深度链接请求
                await _deeplinkConnect.send(uriString);
              },
              tooltip: '支付',
              child: const Icon(Icons.payment),
            ),
          ),
        );
      }
    }
    

更多关于Flutter深度链接处理插件deeplink_connect的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter深度链接处理插件deeplink_connect的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


deeplink_connect 是一个用于处理深度链接的 Flutter 插件。它允许你的应用程序处理来自外部链接的深度链接,并根据链接的内容执行相应的操作。以下是使用 deeplink_connect 插件的基本步骤:

1. 添加依赖

首先,在你的 pubspec.yaml 文件中添加 deeplink_connect 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  deeplink_connect: ^1.0.0  # 请检查最新版本

然后运行 flutter pub get 来获取依赖。

2. 配置深度链接

在你的 AndroidManifest.xmlInfo.plist 文件中配置深度链接。

Android 配置 (AndroidManifest.xml)

<application> 标签内添加以下内容:

<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>

your_schemeyour_host 替换为你应用程序的深度链接方案和主机。

iOS 配置 (Info.plist)

Info.plist 文件中添加以下内容:

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>your_scheme</string>
        </array>
    </dict>
</array>

your_scheme 替换为你应用程序的深度链接方案。

3. 初始化 deeplink_connect

在你的 main.dart 文件中初始化 deeplink_connect 插件:

import 'package:flutter/material.dart';
import 'package:deeplink_connect/deeplink_connect.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化 deeplink_connect
  DeepLinkConnect deepLinkConnect = DeepLinkConnect();

  runApp(MyApp(deepLinkConnect: deepLinkConnect));
}

class MyApp extends StatelessWidget {
  final DeepLinkConnect deepLinkConnect;

  MyApp({required this.deepLinkConnect});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'DeepLink Example',
      home: DeepLinkHandler(deepLinkConnect: deepLinkConnect),
    );
  }
}

4. 处理深度链接

DeepLinkHandler 小部件中处理深度链接:

import 'package:flutter/material.dart';
import 'package:deeplink_connect/deeplink_connect.dart';

class DeepLinkHandler extends StatefulWidget {
  final DeepLinkConnect deepLinkConnect;

  DeepLinkHandler({required this.deepLinkConnect});

  [@override](/user/override)
  _DeepLinkHandlerState createState() => _DeepLinkHandlerState();
}

class _DeepLinkHandlerState extends State<DeepLinkHandler> {
  String _deepLinkData = '';

  [@override](/user/override)
  void initState() {
    super.initState();

    // 监听深度链接
    widget.deepLinkConnect.onLink.listen((String link) {
      setState(() {
        _deepLinkData = link;
      });
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('DeepLink Example'),
      ),
      body: Center(
        child: Text('DeepLink Data: $_deepLinkData'),
      ),
    );
  }
}

5. 测试深度链接

你可以通过以下方式测试深度链接:

  • Android: 在终端中运行 adb shell am start -W -a android.intent.action.VIEW -d "your_scheme://your_host/path" your.package.name
  • iOS: 使用 Xcode 的 Simulator 或直接通过 Safari 浏览器访问 your_scheme://your_host/path

6. 处理冷启动和热启动

deeplink_connect 还支持处理冷启动和热启动的深度链接。你可以在 initState 中获取初始链接:

[@override](/user/override)
void initState() {
  super.initState();

  // 获取初始链接
  widget.deepLinkConnect.getInitialLink().then((String? initialLink) {
    if (initialLink != null) {
      setState(() {
        _deepLinkData = initialLink;
      });
    }
  });

  // 监听深度链接
  widget.deepLinkConnect.onLink.listen((String link) {
    setState(() {
      _deepLinkData = link;
    });
  });
}
回到顶部