Flutter区块链支付插件terra_dart_onchain_payments的使用

Flutter区块链支付插件terra_dart_onchain_payments的使用

轻量级的支付管理库,适用于terra生态系统。支持LUNC与LUNA区块链的支付。

GitHub GitHub GitHub

探索文档 »

示例应用 · API参考 · Pub包 · GitHub

内部管理区块链交易所需的燃烧税的gas估算,使得开发者更容易在LUNC/LUNA区块链上进行支付。

特性

  • 用Dart编写,带有类型定义
  • 适用于Flutter和Dart生态系统,在浏览器和移动解决方案中使用,为在Terra生态系统中构建的应用提供支持
  • 使部署到应用商店的支付管理变得更加简单

安装与配置

Pub 获取最新版本:

dart pub add terra_dart_onchain_payments

使用方法

该插件可用于移动端和Web开发人员,或SDK开发人员希望扩展Terra平台。

管理支付
void verifyCustomerBalance() {
     // 客户钱包的恢复词,将用于支付
     String customerRecoveryWords = "notice oak worry limit wrap speak medal online prefer cluster roof addict wrist behave treat actual wasp year salad speed social layer crew genius";

     // 配置您的支付管理器
     // 设置要针对的目标区块链(在此例中为经典)
     var paymentsManager = PaymentsManager()
          .configureBlockchain(env: TerraEnvironment.classic)
          .configureBusinessWallet(
              businessWallet) // 配置您的业务钱包
          .configureCustomerWallet(
              customerRecoveryWords); // 配置客户钱包

     var simulation = await paymentsManager.getTotalFundsInCustomerWallet();
}
void processPaymentForTerra() {
     // 客户支付将转入的钱包地址
     String businessWallet = "terra17lmam6zguazs5q5u6z5mmx76uj63gldnse2pdp";

     // 客户钱包的恢复词,将用于支付
     String customerRecoveryWords = "notice oak worry limit wrap speak medal online prefer cluster roof addict wrist behave treat actual wasp year salad speed social layer crew genius";

     // 配置您的支付管理器
     // 设置要针对的目标区块链(在此例中为经典)
     var paymentsManager = PaymentsManager()
          .configureBlockchain(env: TerraEnvironment.classic)
          .configureBusinessWallet(
              businessWallet) // 配置您的业务钱包
          .configureCustomerWallet(
              customerRecoveryWords); // 配置客户钱包

     // 客户被收取100 LUNC
     var transaction = await paymentsManager.chargeCustomer(100);
}

许可证

本软件根据MIT许可证授权。完整的许可信息见LICENSE

版权所有 © 2022 TerraMystics。


示例代码

import 'package:flutter/material.dart';

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

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

  // 这个小部件是你的应用的根。它是有状态的,意味着它有一个状态对象(在下面定义),包含影响其外观的字段。
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        // 这是你的应用的主题。
        //
        // 尝试运行你的应用。你会看到应用有一个蓝色工具栏。然后,不退出应用,尝试改变下面的primarySwatch为Colors.green,并调用"热重载"(在你运行"flutter run"的控制台按"r",或直接保存更改来"热重载"在Flutter IDE中)。
        // 注意计数器并没有重置回零;应用没有重启。
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  // 这个小部件是你的应用的主页。它是有状态的,意味着它有一个状态对象(在下面定义),包含影响其外观的字段。
  // 这个类是状态的配置。它持有由父组件(在这个例子中是App小部件)提供的值(在这个例子中是标题),并由build方法使用。在小部件子类中,字段总是标记为"final"。
  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      // 这次对setState的调用告诉Flutter框架某些东西已经改变,这导致它重新运行下面的build方法,以便显示可以反映更新后的值。如果我们不调用setState()改变_counter,那么build方法就不会再次被调用,因此看起来什么都不会发生。
      _counter++;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    // 每次调用setState时,此方法都会重新运行。
    //
    // Flutter框架已被优化为使重新运行构建方法变得快速,因此你可以仅仅重建任何需要更新的东西,而不是单独更改各个小部件。
    return Scaffold(
      appBar: AppBar(
        // 这里我们取MyHomePage对象的值,这是由App.build方法创建的,并用于设置我们的appbar标题。
        title: Text(widget.title),
      ),
      body: Center(
        // Center是一个布局小部件。它只有一个孩子,并将其放置在父级的中间。
        child: Column(
          // Column也是一个布局小部件。它接受一个孩子列表,并垂直排列它们。默认情况下,它水平调整自身以适应其孩子,并尽可能高,以匹配其父级。
          //
          // 调用"调试绘制"(在控制台按"p",选择Android Studio中的"切换调试绘制"动作,或Visual Studio Code中的"切换调试绘制"命令)可以看到每个小部件的线框图。
          //
          // Column有许多属性来控制它如何调整大小和定位其孩子。在这里我们使用mainAxisAlignment来垂直居中孩子;主轴是垂直方向,因为Columns是垂直的(交叉轴将是水平的)。
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            const Text(
              '你已经按了按钮这么多次:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: '增加',
        child: const Icon(Icons.add),
      ), // 这个逗号使自动格式化更美观。
    );
  }
}

更多关于Flutter区块链支付插件terra_dart_onchain_payments的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter区块链支付插件terra_dart_onchain_payments的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


terra_dart_onchain_payments 是一个用于在 Flutter 应用中集成 Terra 区块链支付的插件。它允许开发者轻松地在应用中处理 Terra 区块链上的支付交易。以下是如何使用这个插件的基本步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 terra_dart_onchain_payments 插件的依赖。

dependencies:
  flutter:
    sdk: flutter
  terra_dart_onchain_payments: ^最新版本

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

2. 初始化插件

在你的 Dart 代码中,首先需要导入插件并初始化它。

import 'package:terra_dart_onchain_payments/terra_dart_onchain_payments.dart';

void main() {
  // 初始化插件
  TerraDartOnchainPayments.initialize(
    network: TerraNetwork.mainnet, // 或者 TerraNetwork.testnet
    walletAddress: '你的钱包地址',
    mnemonic: '你的助记词',
  );
}

3. 创建支付交易

你可以使用插件来创建一个支付交易。以下是一个简单的示例:

Future<void> makePayment() async {
  try {
    final paymentResult = await TerraDartOnchainPayments.sendPayment(
      recipientAddress: '接收方钱包地址',
      amount: '1000000', // 以 uusd (micro USD) 为单位
      memo: '支付备注', // 可选
    );

    print('支付成功: ${paymentResult.txhash}');
  } catch (e) {
    print('支付失败: $e');
  }
}

4. 处理交易结果

sendPayment 方法返回一个包含交易哈希(txhash)的对象。你可以使用这个哈希来查询交易的状态或详细信息。

Future<void> checkTransactionStatus(String txhash) async {
  try {
    final txStatus = await TerraDartOnchainPayments.getTransactionStatus(txhash);
    print('交易状态: ${txStatus.status}');
  } catch (e) {
    print('查询交易状态失败: $e');
  }
}

5. 查询余额

你还可以查询钱包的余额。

Future<void> checkBalance() async {
  try {
    final balance = await TerraDartOnchainPayments.getBalance();
    print('钱包余额: $balance uusd');
  } catch (e) {
    print('查询余额失败: $e');
  }
}
回到顶部