Flutter集成Aptos SDK插件aptos_sdk_dart的使用

发布于 1周前 作者 sinazl 来自 Flutter

Flutter集成Aptos SDK插件aptos_sdk_dart的使用

本包重新导出了 Dart Aptos API 并提供了额外的功能以支持其使用,例如处理十六进制字符串/地址的工具和功能支持Aptos账户,特别是用于处理密钥/账户地址。

例如代码演示如何使用此库,可以查看 https://github.com/banool/aptos_sdk_dart/blob/main/test/full_library_test.dart。我已经几乎完全复制了 TypeScript SDK 中的测试,并确认最终结果是相同的。

注意:与 TypeScript SDK 相比,此SDK目前仍然不完整。例如,这不提供水龙头客户端。希望将来我能有时间进一步构建它。

此库确实将您锁定为使用Dio,抱歉。不幸的是,dart-dio生成器比标准HTTP生成器要好得多。除此之外,我本来可以只生成模型,但我选择了易用性。

完整示例Demo

以下是一个完整的示例,展示如何在Flutter项目中集成并使用aptos_sdk_dart插件:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Aptos SDK Demo'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              // 初始化Aptos客户端
              final client = AptosClient("https://fullnode.mainnet.aptoslabs.com/v1");

              // 获取账户信息
              try {
                final account = await client.getAccount("0xYOUR_ACCOUNT_ADDRESS");
                print("Account: $account");
              } catch (e) {
                print("Error fetching account: $e");
              }

              // 发送交易
              try {
                final transaction = await client.submitTransaction(
                  "0xYOUR_ACCOUNT_ADDRESS",
                  "0xYOUR_MODULE_ADDRESS",
                  "transfer",
                  ["0xRECEIVER_ADDRESS", "100000000"],
                );
                print("Transaction: $transaction");
              } catch (e) {
                print("Error submitting transaction: $e");
              }
            },
            child: Text('Fetch Account & Send Transaction'),
          ),
        ),
      ),
    );
  }
}

代码说明

  1. 导入必要的包:

    import 'package:flutter/material.dart';
    import 'package:aptos_sdk_dart/aptos_sdk_dart.dart';
    
  2. 初始化Aptos客户端:

    final client = AptosClient("https://fullnode.mainnet.aptoslabs.com/v1");
    

    这里使用了Aptos主网的全节点URL。

  3. 获取账户信息:

    final account = await client.getAccount("0xYOUR_ACCOUNT_ADDRESS");
    

    通过账户地址获取账户信息。

  4. 发送交易:

    final transaction = await client.submitTransaction(
      "0xYOUR_ACCOUNT_ADDRESS",
      "0xYOUR_MODULE_ADDRESS",
      "transfer",
      ["0xRECEIVER_ADDRESS", "100000000"],
    );
    

更多关于Flutter集成Aptos SDK插件aptos_sdk_dart的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter集成Aptos SDK插件aptos_sdk_dart的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中集成并使用aptos_sdk_dart插件的示例代码。aptos_sdk_dart是一个用于与Aptos区块链交互的Dart库。在实际开发中,你需要确保已经正确配置了Flutter开发环境,并且已经有一个Flutter项目。

步骤 1: 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  aptos_sdk_dart: ^最新版本号 # 请替换为实际的最新版本号

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

步骤 2: 导入库

在你的Dart文件中导入aptos_sdk_dart库:

import 'package:aptos_sdk_dart/aptos_sdk_dart.dart';

步骤 3: 配置网络

配置你要连接到的Aptos网络。通常,你需要知道网络的RPC URL。

final client = AptosClient(rpcUrl: 'https://your-aptos-rpc-url.com');

步骤 4: 生成账户

你可以使用aptos_sdk_dart来生成一个新的Aptos账户。

Future<void> generateAccount() async {
  final account = await Account.generate();
  print('Generated Account Address: ${account.address}');
  print('Generated Account Private Key: ${account.privateKey}'); // 注意:私钥应该安全存储,不要泄露
}

步骤 5: 查询余额

查询指定账户的余额。

Future<void> getBalance(String address) async {
  final balance = await client.getBalance(address);
  print('Balance: $balance');
}

步骤 6: 发送交易

发送一个简单的转账交易。你需要提供发送者账户、接收者地址、转账金额以及gas费用等信息。

Future<void> sendTransaction(
    Account senderAccount, String receiverAddress, int amountMicroAptos) async {
  final gasUnitPrice = 1; // gas单价,单位微Aptos
  final maxGasAmount = 1000000; // 最大gas量
  final sequenceNumber = await client.getAccountSequenceNumber(senderAccount.address);

  final txn = TransactionBuilder()
      .addTransferAction(receiverAddress, amountMicroAptos)
      .setGasUnitPrice(gasUnitPrice)
      .setMaxGasAmount(maxGasAmount)
      .setSequenceNumber(sequenceNumber)
      .build();

  final signedTxn = await senderAccount.sign(txn, client.chainId);
  final txnResult = await client.submit(signedTxn);
  print('Transaction Result: $txnResult');
}

完整示例

以下是一个完整的示例,展示了如何生成账户、查询余额和发送交易:

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

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  late AptosClient client;
  late Account? generatedAccount;

  @override
  void initState() {
    super.initState();
    client = AptosClient(rpcUrl: 'https://your-aptos-rpc-url.com');
    generateAccountExample();
  }

  Future<void> generateAccountExample() async {
    generatedAccount = await Account.generate();
    setState(() {});
  }

  Future<void> getBalanceExample() async {
    if (generatedAccount != null) {
      final balance = await client.getBalance(generatedAccount!.address);
      print('Balance: $balance');
    }
  }

  Future<void> sendTransactionExample() async {
    if (generatedAccount != null) {
      final receiverAddress = 'recipient_address_here'; // 替换为接收者地址
      final amountMicroAptos = 1000000; // 转账金额,单位微Aptos
      await sendTransaction(generatedAccount!, receiverAddress, amountMicroAptos);
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Aptos SDK Flutter Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              if (generatedAccount != null)
                Text('Generated Account Address: ${generatedAccount!.address}'),
              ElevatedButton(
                onPressed: getBalanceExample,
                child: Text('Get Balance'),
              ),
              ElevatedButton(
                onPressed: sendTransactionExample,
                child: Text('Send Transaction'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

Future<void> sendTransaction(Account senderAccount, String receiverAddress, int amountMicroAptos) async {
  final gasUnitPrice = 1; // gas单价,单位微Aptos
  final maxGasAmount = 1000000; // 最大gas量
  final sequenceNumber = await client.getAccountSequenceNumber(senderAccount.address);

  final txn = TransactionBuilder()
      .addTransferAction(receiverAddress, amountMicroAptos)
      .setGasUnitPrice(gasUnitPrice)
      .setMaxGasAmount(maxGasAmount)
      .setSequenceNumber(sequenceNumber)
      .build();

  final signedTxn = await senderAccount.sign(txn, client.chainId);
  final txnResult = await client.submit(signedTxn);
  print('Transaction Result: $txnResult');
}

注意事项

  1. 安全性:私钥应该安全存储,不要将其硬编码在代码中或泄露给不安全的环境。
  2. RPC URL:确保你使用的RPC URL是可信的。
  3. 错误处理:在实际应用中,你应该添加适当的错误处理逻辑。

这个示例代码展示了如何在Flutter项目中集成并使用aptos_sdk_dart插件进行基本的Aptos区块链操作。根据你的具体需求,你可能需要扩展这些功能。

回到顶部