Flutter数据累积处理插件accumulate_api的使用

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

Flutter数据累积处理插件accumulate_api的使用

Accumulate Dart Client 是一个用于 Accumulate 区块链的 Dart 客户端库。它支持所有 API 类和基本数据类型,并提供了一些实用函数来简化特定请求的创建。

安装

在 Dart 项目中安装 accumulate_api

$ dart pub add accumulate_api

在 Flutter 项目中安装 accumulate_api

$ flutter pub add accumulate_api

这会在你的 pubspec.yaml 文件中添加以下依赖项:

dependencies:
  accumulate_api: any

然后导入该库:

import 'package:accumulate_api/accumulate_api.dart';

使用

1. 生成 Lite 身份

ACMEClient client = ACMEClient("https://testnet.accumulatenetwork.io/v2");
var lid = LiteIdentity(Ed25519KeypairSigner.generate());

2. 从 Faucet 添加 ACME 令牌

ACMEClient client = ACMEClient("https://testnet.accumulatenetwork.io/v2");
var lid = LiteIdentity(Ed25519KeypairSigner.generate());
final res = await client.faucet(lid.acmeTokenAccount);

3. 向 Lite 身份添加积分

int creditAmount = 60000;
AddCreditsParam addCreditsParam = AddCreditsParam();  
addCreditsParam.recipient = lid.url;  
addCreditsParam.amount = (creditAmount * pow(10, 8)) ~/ oracle;  
addCreditsParam.oracle = await client.valueFromOracle();  
await client.addCredits(lid.url, addCreditsParam, lid);

4. 将 ACME 令牌发送到另一个 Lite ACME 令牌账户

int sendToken = 10000;
final recipient =  
    LiteIdentity(Ed25519KeypairSigner.generate()).acmeTokenAccount;  
SendTokensParam sendTokensParam = SendTokensParam();  
TokenRecipientParam tokenRecipientParam = TokenRecipientParam();  
tokenRecipientParam.amount = sendToken * pow(10, 8);  
tokenRecipientParam.url = recipient;  
sendTokensParam.to = List<TokenRecipientParam>.from([tokenRecipientParam]);  
await client.sendTokens(lid.acmeTokenAccount, sendTokensParam, lid);

5. 创建 ADI

final identitySigner = Ed25519KeypairSigner.generate();  
var identityUrl = "acc://custom-adi-name";  
final bookUrl = identityUrl + "/custom-book-name";  
  
CreateIdentityParam createIdentityParam = CreateIdentityParam();  
createIdentityParam.url = identityUrl;  
createIdentityParam.keyBookUrl = bookUrl;  
createIdentityParam.keyHash = identitySigner.publicKeyHash();  
await client.createIdentity(lid.url, createIdentityParam, lid);

完整示例

下面是一个完整的示例,展示了如何使用 accumulate_api 插件进行一些常见的操作:

import 'dart:convert';
import 'dart:io';
import 'dart:math';
import 'dart:typed_data';

import 'package:accumulate_api/accumulate_api.dart';
import 'package:accumulate_api/src/model/receipt_model.dart' as ReceiptM;
import 'package:accumulate_api/src/payload/add_credits.dart';
import 'package:accumulate_api/src/payload/create_identity.dart';
import 'package:accumulate_api/src/payload/create_token.dart';
import 'package:accumulate_api/src/signing/ed25519_keypair_signer.dart';
import 'package:accumulate_api/src/transaction.dart' as trans;
import 'package:accumulate_api/src/client/tx_signer.dart';
import 'package:crypto/crypto.dart';
import 'package:hex/hex.dart';

final endPoint = "https://testnet.accumulatenetwork.io/v2";
ACMEClient client = ACMEClient(endPoint);

Future<void> main() async {
  print(endPoint);

  int waitTimeInSeconds = 60;

  LiteIdentity lid;
  String identityUrl;
  TxSigner identityKeyPageTxSigner;

  final oracle = await client.valueFromOracle();

  lid = LiteIdentity(Ed25519KeypairSigner.generate());

  print("new account ${lid.acmeTokenAccount.toString()}");
  print("\n");
  await Future.wait([
    client.faucet(lid.acmeTokenAccount),
    Future.delayed(const Duration(seconds: 10)),
    client.faucet(lid.acmeTokenAccount),
    Future.delayed(const Duration(seconds: 10)),
    client.faucet(lid.acmeTokenAccount),
    Future.delayed(const Duration(seconds: 10)),
    client.faucet(lid.acmeTokenAccount),
    Future.delayed(const Duration(seconds: 10)),
    client.faucet(lid.acmeTokenAccount),
    Future.delayed(const Duration(seconds: 10)),
    client.faucet(lid.acmeTokenAccount),
    Future.delayed(const Duration(seconds: 10)),
    client.faucet(lid.acmeTokenAccount),
    Future.delayed(const Duration(seconds: 10)),
    client.faucet(lid.acmeTokenAccount),
    Future.delayed(const Duration(seconds: 10)),
    client.faucet(lid.acmeTokenAccount),
    Future.delayed(const Duration(seconds: 10)),
  ]);

  dynamic res = await client.faucet(lid.acmeTokenAccount);
  print(res);
  print("\n");
  sleep(Duration(seconds: 10));
  String txId = res["result"]["txid"];
  print("faucet txId $txId");

  res = await client.queryUrl(lid.url);
  print(res);

  res = await client.queryUrl(lid.acmeTokenAccount);
  print(res);
  print("\n");

  int creditAmount = 50000 * 10;
  AddCreditsParam addCreditsParam = AddCreditsParam();
  addCreditsParam.recipient = lid.url;
  addCreditsParam.amount = (creditAmount * pow(10, 8)) ~/ oracle;
  addCreditsParam.oracle = oracle;
  addCreditsParam.memo = "Add credits memo test";
  addCreditsParam.metadata = utf8.encode("Add credits metadata test").asUint8List();

  res = await client.addCredits(lid.acmeTokenAccount, addCreditsParam, lid);
  print("addCredits res $res");

  txId = res["result"]["txid"];
  print("addCredits txId $txId");
  sleep(Duration(seconds: waitTimeInSeconds));
  res = await client.queryTx(txId);

  identityUrl = "acc://adi-${DateTime.now().millisecondsSinceEpoch}.acme";
  final identitySigner = Ed25519KeypairSigner.generate();
  final bookUrl = identityUrl + "/jimmy-book";
  CreateIdentityParam createIdentity = CreateIdentityParam();

  createIdentity.url = identityUrl;
  createIdentity.keyHash = identitySigner.publicKeyHash();
  createIdentity.keyBookUrl = bookUrl;

  res = await client.createIdentity(lid.url, createIdentity, lid);
  txId = res["result"]["txid"];
  print("createIdentity txId $txId");

  sleep(Duration(seconds: waitTimeInSeconds));

  final keyPageUrl = bookUrl + "/1";

  creditAmount = 90000 * 10;

  addCreditsParam = AddCreditsParam();
  addCreditsParam.recipient = keyPageUrl;
  addCreditsParam.amount = (creditAmount * pow(10, 8)) ~/ oracle;
  addCreditsParam.oracle = oracle;

  res = await client.addCredits(lid.acmeTokenAccount, addCreditsParam, lid);
  txId = res["result"]["txid"];
  print("Add credits to page $keyPageUrl txId $txId");
  sleep(Duration(seconds: waitTimeInSeconds));

  final tokenUrl = identityUrl + "/JTok";
  CreateTokenParam createTokenParam = CreateTokenParam();
  createTokenParam.url = tokenUrl;
  createTokenParam.symbol = "JT";
  createTokenParam.precision = 0;

  identityKeyPageTxSigner = TxSigner(keyPageUrl, identitySigner);

  res = await client.createToken(identityUrl, createTokenParam, identityKeyPageTxSigner);
  txId = res["result"]["txid"];
  print("CustomToken txId $txId");
  sleep(Duration(seconds: waitTimeInSeconds));

  var recipient = LiteIdentity(Ed25519KeypairSigner.generate()).acmeTokenAccount;

  int amount = 12000;

  SendTokensParam sendTokensParam = SendTokensParam();
  TokenRecipientParam tokenRecipientParam = TokenRecipientParam();
  tokenRecipientParam.url = recipient;
  tokenRecipientParam.amount = amount;
  sendTokensParam.to = [tokenRecipientParam];

  res = await client.sendTokens(lid.acmeTokenAccount, sendTokensParam, lid);

  txId = res["result"]["txid"];
  print("Send Token $txId");

  res = await client.queryTx(txId);
  sleep(Duration(seconds: 60));

  print("DONE");
}

更多关于Flutter数据累积处理插件accumulate_api的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter数据累积处理插件accumulate_api的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何使用Flutter数据累积处理插件accumulate_api的示例代码案例。假设accumulate_api是一个用于数据累积和处理的自定义Flutter插件(请注意,由于accumulate_api并非一个真实存在的标准Flutter插件,以下代码是一个假设性的示例,旨在展示如何使用一个类似的插件)。

首先,确保你已经在pubspec.yaml文件中添加了accumulate_api依赖(假设它存在):

dependencies:
  flutter:
    sdk: flutter
  accumulate_api: ^1.0.0  # 假设版本号

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

接下来,在你的Flutter应用中,你可以按照以下方式使用accumulate_api进行数据的累积和处理:

import 'package:flutter/material.dart';
import 'package:accumulate_api/accumulate_api.dart';  // 假设这是插件的导入路径

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Accumulate API Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: AccumulateDemoPage(),
    );
  }
}

class AccumulateDemoPage extends StatefulWidget {
  @override
  _AccumulateDemoPageState createState() => _AccumulateDemoPageState();
}

class _AccumulateDemoPageState extends State<AccumulateDemoPage> {
  final Accumulator _accumulator = Accumulator();  // 假设Accumulator是插件提供的主要类
  List<int> _dataList = [];
  int _accumulatedValue = 0;

  void _addData(int value) {
    setState(() {
      _dataList.add(value);
      _accumulator.addData(value);  // 假设插件提供了addData方法来累积数据
      _accumulatedValue = _accumulator.accumulatedValue;  // 获取累积值
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Accumulate API Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            Text('Accumulated Value: $_accumulatedValue'),
            SizedBox(height: 16.0),
            ElevatedButton(
              onPressed: () => _addData(10),  // 添加数据示例
              child: Text('Add 10'),
            ),
            SizedBox(height: 8.0),
            ElevatedButton(
              onPressed: () => _addData(20),  // 添加数据示例
              child: Text('Add 20'),
            ),
            SizedBox(height: 16.0),
            Text('Data List: $_dataList'),  // 显示添加的数据列表
          ],
        ),
      ),
    );
  }
}

// 假设Accumulator类是插件提供的数据累积类
class Accumulator {
  int _accumulatedValue = 0;

  void addData(int value) {
    _accumulatedValue += value;
  }

  int get accumulatedValue => _accumulatedValue;
}

// 注意:以上Accumulator类仅作为示例,实际使用时应使用插件提供的类和方法。

在这个示例中,我们假设accumulate_api插件提供了一个Accumulator类,用于累积数据。我们通过调用addData方法向累积器中添加数据,并通过accumulatedValue属性获取当前的累积值。在UI中,我们展示了一个按钮用于添加数据,并实时更新显示累积值和添加的数据列表。

请注意,由于accumulate_api并非一个真实存在的Flutter插件,因此上述代码中的Accumulator类和相关方法仅为示例。在实际应用中,你需要参考插件的官方文档来使用正确的类和方法。

回到顶部