Flutter连接管理插件darttonconnect_plus的使用

Flutter连接管理插件darttonconnect_plus的使用

本文将详细介绍如何在Flutter项目中使用darttonconnect_plus插件来实现与TON钱包的连接和交易功能。


安装

首先,在你的Flutter项目的pubspec.yaml文件中添加依赖:

dependencies:
  darttonconnect_plus: ^1.0.1

然后运行以下命令以安装依赖:

$ flutter pub get

配置

创建一个JSON格式的manifest文件,用于描述你的应用信息。这些信息将在用户连接钱包时显示。

示例manifest文件内容如下:

{
  "url": "<app-url>",                       // 必填项:应用的URL
  "name": "<app-name>",                     // 必填项:应用名称
  "iconUrl": "<app-icon-url>",              // 必填项:应用图标URL
  "termsOfUseUrl": "<terms-of-use-url>",    // 可选项:隐私政策URL
  "privacyPolicyUrl": "<privacy-policy-url>"// 可选项:服务条款URL
}

确保该文件可以通过其URL访问。


初始化

在Flutter代码中初始化TonConnectManager并传入manifest文件的URL。

import 'package:darttonconnect_plus/darttonconnect_plus.dart';

void main() {
  var tonManager = TonConnectManager(
    'https://gist.githubusercontent.com/romanovichim/e81d599a6f3798bb9f74ab1970a8b376/raw/43e00b0abc824ef272ac6d0f8083d21456602adf/gistfiletest.txt',
  );

  // 订阅事件流
  tonManager.messagesStream.listen((TonPaymentStatus status) {
    print('接收到事件: $status');
  });
}

处理事件

TonConnectManager会通过事件流发送各种状态更新。以下是可能的状态及其含义:

  • TonPaymentStatus.Wallets_loaded
    支持的TON钱包列表已加载。此时可以提示用户选择钱包进行连接。

  • TonPaymentStatus.UniversalLink_generated
    用户选择了特定的钱包,生成了连接链接。

  • TonPaymentStatus.Connected
    选定的钱包已成功连接到应用。此时可以发起交易请求。

  • TonPaymentStatus.Transaction_prepaired
    交易请求已通过TON HTTP桥发送。用户需要打开钱包确认交易。

  • TonPaymentStatus.Transaction_sent
    交易已成功添加到区块链。

  • TonPaymentStatus.Transaction_error_or_rejected
    用户拒绝了交易或连接出现问题。

  • TonPaymentStatus.Disconnected
    钱包已从应用中断开连接。


发起交易

darttonconnect_plus提供了两种方式来发起交易:简单接口和自定义接口。

简单接口

void sendTrx({
  required String address,   // 目标地址
  required int amount,       // 转账金额(单位为微吨)
  String? comment,           // 交易备注
  int? validUntill,          // 交易有效期(秒)
}) async {
  await tonManager.sendTrx(
    address: address,
    amount: amount,
    comment: comment,
    validUntill: validUntill,
  );
}

自定义接口

void sendTrxRaw({required Map<String, dynamic> transaction}) async {
  await tonManager.sendTrxRaw(transaction: transaction);
}

示例代码

以下是一个完整的示例代码,展示了如何使用darttonconnect_plus插件完成基本的连接和交易操作。

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomeScreen(),
    );
  }
}

class HomeScreen extends StatefulWidget {
  [@override](/user/override)
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  late TonConnectManager tonManager;

  [@override](/user/override)
  void initState() {
    super.initState();
    tonManager = TonConnectManager(
      'https://gist.githubusercontent.com/romanovichim/e81d599a6f3798bb9f74ab1970a8b376/raw/43e00b0abc824ef272ac6d0f8083d21456602adf/gistfiletest.txt',
    );

    tonManager.messagesStream.listen((TonPaymentStatus status) {
      print('接收到事件: $status');
    });
  }

  void _connectWallet() async {
    try {
      await tonManager.connect();
      print('钱包已连接');
    } catch (e) {
      print('连接失败: $e');
    }
  }

  void _sendTransaction() async {
    try {
      await tonManager.sendTrx(
        address: 'EQB9HrZ...KQ', // 示例目标地址
        amount: 1000000,         // 示例转账金额(微吨)
        comment: '测试交易',
      );
      print('交易已发送');
    } catch (e) {
      print('交易失败: $e');
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('TON Connect 示例')),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: _connectWallet,
              child: Text('连接钱包'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _sendTransaction,
              child: Text('发送交易'),
            ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


darttonconnect_plus 是一个用于在 Flutter 应用中连接和管理 TON (The Open Network) 钱包的插件。它允许开发者轻松地与 TON 区块链进行交互,包括发送交易、获取余额、管理钱包等操作。

以下是如何在 Flutter 项目中使用 darttonconnect_plus 的基本步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 darttonconnect_plus 依赖:

dependencies:
  flutter:
    sdk: flutter
  darttonconnect_plus: ^0.1.0  # 请使用最新版本

然后运行 flutter pub get 以安装依赖。

2. 初始化 TON Connect

在你的 Dart 文件中,导入 darttonconnect_plus 并初始化 TON Connect:

import 'package:darttonconnect_plus/darttonconnect_plus.dart';

void main() async {
  // 初始化 TON Connect
  final tonConnect = TonConnect();

  // 连接到钱包
  final connectionUrl = await tonConnect.connect();
  print('Connect URL: $connectionUrl');

  // 监听连接状态
  tonConnect.onStatusChange((walletInfo) {
    print('Wallet connected: ${walletInfo.account.address}');
  });
}

3. 连接到钱包

tonConnect.connect() 方法会生成一个连接 URL,你可以将这个 URL 展示给用户,用户可以通过 TON 钱包应用(如 Tonkeeper)扫描该 URL 来连接钱包。

final connectionUrl = await tonConnect.connect();
print('Connect URL: $connectionUrl');

4. 监听连接状态

你可以通过 onStatusChange 方法来监听钱包的连接状态。当用户成功连接钱包时,回调函数会被触发。

tonConnect.onStatusChange((walletInfo) {
  print('Wallet connected: ${walletInfo.account.address}');
});

5. 发送交易

一旦钱包连接成功,你可以使用 sendTransaction 方法来发送交易。

final transaction = {
  'to': 'EQCD39VS5jcptHL8vMjEXrzGaRcCVYto7HAn4bpAOg8xqB2N',
  'value': '1000000000', // 1 TON
  'payload': 'Hello, TON!',
};

final result = await tonConnect.sendTransaction(transaction);
print('Transaction result: $result');

6. 断开连接

你可以使用 disconnect 方法来断开与钱包的连接。

await tonConnect.disconnect();
print('Disconnected from wallet');

7. 获取钱包信息

你可以通过 getWalletInfo 方法来获取当前连接的钱包信息。

final walletInfo = await tonConnect.getWalletInfo();
print('Wallet info: $walletInfo');

8. 处理错误

在使用过程中,可能会遇到各种错误。你可以通过 try-catch 块来捕获并处理这些错误。

try {
  final transaction = {
    'to': 'EQCD39VS5jcptHL8vMjEXrzGaRcCVYto7HAn4bpAOg8xqB2N',
    'value': '1000000000', // 1 TON
    'payload': 'Hello, TON!',
  };

  final result = await tonConnect.sendTransaction(transaction);
  print('Transaction result: $result');
} catch (e) {
  print('Error: $e');
}
回到顶部