Flutter集成PI网络插件pi_flutter_sdk的使用

Flutter集成PI网络插件pi_flutter_sdk的使用

Dart Flutter

Soneso开放源码的Stellar SDK for Flutter是基于Dart构建的,提供了构建和签署交易的API,并可以连接和查询Horizon服务。

安装

从pub.dev

  1. 在你的pubspec.yaml文件中添加依赖:
dependencies:
  pi_flutter_sdk: ^1.6.5
  1. 在命令行或IDE中安装它:
flutter pub get
  1. 在源文件中导入SDK,初始化并使用它:
import 'package:pi_flutter_sdk/pi_flutter_sdk.dart';

final StellarSDK sdk = StellarSDK.TESTNET;

String accountId = "GASYKQXV47TPTB6HKXWZNB6IRVPMTQ6M6B27IM5L2LYMNYBX2O53YJAL";
AccountResponse account = await sdk.accounts.account(accountId);
print("sequence number: ${account.sequenceNumber}");

手动

SDK是一个Flutter Dart包。以下是推荐的步骤:

  1. 克隆此仓库。
  2. 在你的IDE(例如Android Studio)中打开项目。
  3. 打开pubspec.yaml文件,并在IDE中按Pub get
  4. 转到项目的test目录,运行一个测试,你就可以开始使用了!

添加到你的应用中:

  1. 在你的Flutter应用中,在pubspec.yaml文件中添加本地依赖,然后运行pub get
dependencies:
   flutter:
     sdk: flutter
   pi_flutter_sdk:
     path: ../pi_flutter_sdk
  1. 在源文件中导入SDK,初始化并使用它:
import 'package:pi_flutter_sdk/pi_flutter_sdk.dart';

final StellarSDK sdk = StellarSDK.TESTNET;

String accountId = "GASYKQXV47TPTB6HKXWZNB6IRVPMTQ6M6B27IM5L2LYMNYBX2O53YJAL";
AccountResponse account = await sdk.accounts.account(accountId);
print("sequence number: ${account.sequenceNumber}");

快速入门

1. 创建一个Stellar密钥对

随机生成
// 创建一个全新的唯一密钥对。
KeyPair keyPair = KeyPair.random();

print("${keyPair.accountId}");
// GCFXHS4GXL6BVUCXBWXGTITROWLVYXQKQLF4YH5O5JT3YZXCYPAFBJZB

print("${keyPair.secretSeed}");
// SAV76USXIJOBMEQXPANUOQM6F5LIOTLPDIDVRJBFFE2MDJXG24TAPUU7
确定性生成

Stellar生态系统提案SEP-005描述了Stellar账户的密钥派生方法。这提高了密钥存储的安全性,并使得密钥可以在钱包和应用程序之间移动。

生成助记词
String mnemonic =  await Wallet.generate24WordsMnemonic();
print(mnemonic);
// mango debris lumber vivid bar risk prosper verify photo put ridge sell range pet indoor lava sister around panther brush twice cattle sauce romance
生成密钥对
Wallet wallet = await Wallet.from("mango debris lumber vivid bar risk prosper verify photo put ridge sell range pet indoor lava sister around panther brush twice cattle sauce romance");

KeyPair keyPair0 = await wallet.getKeyPair(index: 0);
print("${keyPair0.accountId} : ${keyPair0.secretSeed}");
// GBYTVBTOVXBIT23X4YUEE32QBAAA537OAF553FWABUAZHT3FNPN3FUGG : SBEQZ4XGS434POXNQYUXQYFV6JYUHV56U2MNMUZBBBLBGR5X6PUUCYO5

KeyPair keyPair1 = await wallet.getKeyPair(index: 1);
print("${keyPair1.accountId} : ${keyPair1.secretSeed}");
// GD5JFZ6U4TBKLWOVGAJQZ4CWRHNVXIFF65BBXZG6UEQE74RUXWAKQVQN : SD3IXULYMZKB6ML7AJW4OLAXKN6U3BYDUMOZLKUZTCCGZXUFXAS7NKIO

支持的语言有:英语、法语、西班牙语、意大利语、韩语、日语、简体中文和繁体中文。更多细节请参见我们的SEP-005示例。

2. 创建一个账户

生成密钥对后,你已经获得了地址,但除非有人至少转账1个Lumen到该地址,否则它不会被激活。

2.1 测试网

如果你想在Stellar测试网络中玩,SDK可以请求Friendbot为你创建一个账户,如以下所示:

bool funded = await FriendBot.fundTestAccount(keyPair.accountId);
print ("funded: ${funded}");
2.2 主网

另一方面,如果你想在主网上创建一个账户,你应该从交易所购买一些Stellar Lumens (XLM)。当你将Lumens提取到你的新账户时,交易所会自动为你创建账户。然而,如果你想从自己的另一个账户创建一个账户,你可以运行以下代码:

/// 为现有账户创建一个密钥对。
KeyPair keyA = KeyPair.fromSecretSeed("SAPS66IJDXUSFDSDKIHR4LN6YPXIGCM5FBZ7GE66FDKFJRYJGFW7ZHYF");

/// 从stellar网络加载账户数据。
AccountResponse accA = await sdk.accounts.account(keyA.accountId);

/// 为新账户创建一个密钥对。
KeyPair keyB = KeyPair.random();

/// 创建操作构建器。
CreateAccountOperationBuilder createAccBuilder = CreateAccountOperationBuilder(keyB.accountId, "3"); // 发送3 XLM (lumen)

// 创建事务。
Transaction transaction = new TransactionBuilder(accA)
        .addOperation(createAccBuilder.build())
        .build();

/// 使用现有账户的密钥对签署事务。
transaction.sign(keyA, Network.PUBLIC);

/// 将事务提交到stellar网络。
SubmitTransactionResponse response = await sdk.submitTransaction(transaction);

if (response.success) {
  print ("account ${keyB.accountId} created");
}

3. 检查账户

3.1 基本信息

创建账户后,我们可以检查账户的基本信息。

String accountId = "GASYKQXV47TPTB6HKXWZNB6IRVPMTQ6M6B27IM5L2LYMNYBX2O53YJAL";

// 请求账户数据。
AccountResponse account = await sdk.accounts.account(accountId);

// 你可以检查`balance`、`sequence`、`flags`、`signers`、`data`等。

for (Balance balance in account.balances) {
  switch (balance.assetType) {
    case Asset.TYPE_NATIVE:
      print("Balance: ${balance.balance} XLM");
      break;
    default:
      print("Balance: ${balance.balance} ${balance
          .assetCode} Issuer: ${balance.assetIssuer}");
  }
}

print("Sequence number: ${account.sequenceNumber}");

for (Signer signer in account.signers) {
  print("Signer public key: ${signer.accountId}");
}

for (String key in account.data.keys) {
  print("Data key: ${key} value: ${account.data[key]}");
}
3.2 检查付款

你可以检查与账户相关的付款:

Page<OperationResponse> payments = await sdk.payments.forAccount(accountAId).order(RequestBuilderOrder.DESC).execute();

for (OperationResponse response in payments.records) {
  if (response is PaymentOperationResponse) {
    PaymentOperationResponse por = response as PaymentOperationResponse;
    if (por.transactionSuccessful) {
      print("Transaction hash: ${por.transactionHash}");
    }
  }
}

你可以使用limitordercursor来定制查询。获取账户、账本和事务的最新付款。

Horizon支持SSE推送数据。你可以这样使用它:

String accountId = "GDXPJR65A6EXW7ZIWWIQPO6RKTPG3T2VWFBS3EAHJZNFW6ZXG3VWTTSK";

sdk.payments.forAccount(accountId).cursor("now").stream().listen((response) {
  if (response is PaymentOperationResponse) {
    switch (response.assetType) {
      case Asset.TYPE_NATIVE:
        print("Payment of ${response.amount} XLM from ${response.sourceAccount} received.");
        break;
      default:
        print("Payment of ${response.amount} ${response.assetCode} from ${response.sourceAccount} received.");
    }
  }
});
3.3 检查其他

就像付款一样,你可以检查assetstransactionseffectsoffersoperationsledgers等。

sdk.assets.
sdk.transactions.
sdk.effects.
sdk.offers.
sdk.operations.
sdk.orderBook.
sdk.trades.
// 添加更多...

4. 构建和提交交易

例如“发送原生支付”:

KeyPair senderKeyPair = KeyPair.fromSecretSeed("SAPS66IJDXUSFDSDKIHR4LN6YPXIGCM5FBZ7GE66FDKFJRYJGFW7ZHYF");
String destination = "GDXPJR65A6EXW7ZIWWIQPO6RKTPG3T2VWFBS3EAHJZNFW6ZXG3VWTTSK";

// 从stellar网络加载发送者账户数据。
AccountResponse sender = await sdk.accounts.account(senderKeyPair.accountId);

// 构建事务,从发送者向目的地发送100 XLM原生支付。
Transaction transaction = new TransactionBuilder(sender)
    .addOperation(PaymentOperationBuilder(destination,Asset.NATIVE, "100").build())
    .build();

// 使用发送者的密钥对签署事务。
transaction.sign(senderKeyPair, Network.TESTNET);

// 将事务提交到stellar网络。
SubmitTransactionResponse response = await sdk.submitTransaction(transaction);
if (response.success) {
  print("Payment sent");
}

5. 使用Federation解析Stellar地址

FederationResponse response = await Federation.resolveStellarAddress("bob*soneso.com");

print(response.stellarAddress);
// bob*soneso.com

print(response.accountId);
// GBVPKXWMAB3FIUJB6T7LF66DABKKA2ZHRHDOQZ25GBAEFZVHTBPJNOJI

print(response.memoType);
// text

print(response.memo);
// hello memo text

更多关于Flutter集成PI网络插件pi_flutter_sdk的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


要在Flutter项目中集成和使用pi_flutter_sdk插件,你需要按照以下步骤进行操作。pi_flutter_sdk是一个用于与PI网络进行交互的Flutter插件,它允许你在Flutter应用中实现与PI网络相关的功能。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  pi_flutter_sdk: ^0.1.0  # 请根据实际情况使用最新版本

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

2. 初始化SDK

在你的Flutter应用中,你需要在应用启动时初始化pi_flutter_sdk

import 'package:pi_flutter_sdk/pi_flutter_sdk.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // 初始化PI SDK
  await PiFlutterSdk.initialize(
    apiKey: 'YOUR_API_KEY',  // 你的PI网络API Key
    appId: 'YOUR_APP_ID',    // 你的应用ID
    environment: PiEnvironment.sandbox,  // 使用沙盒环境或生产环境
  );

  runApp(MyApp());
}

3. 使用SDK功能

pi_flutter_sdk提供了多种功能,例如创建钱包、发送交易、查询余额等。以下是一些常见的使用示例。

创建钱包

void createWallet() async {
  try {
    final wallet = await PiFlutterSdk.createWallet();
    print('Wallet created: ${wallet.address}');
  } catch (e) {
    print('Error creating wallet: $e');
  }
}

查询余额

void getBalance(String address) async {
  try {
    final balance = await PiFlutterSdk.getBalance(address);
    print('Balance: $balance');
  } catch (e) {
    print('Error getting balance: $e');
  }
}

发送交易

void sendTransaction(String fromAddress, String toAddress, double amount) async {
  try {
    final transaction = await PiFlutterSdk.sendTransaction(
      fromAddress: fromAddress,
      toAddress: toAddress,
      amount: amount,
    );
    print('Transaction sent: ${transaction.txId}');
  } catch (e) {
    print('Error sending transaction: $e');
  }
}

4. 处理回调

在某些情况下,你可能需要处理来自PI网络的回调,例如支付成功或失败的回调。你可以在初始化SDK时设置回调处理函数。

PiFlutterSdk.setPaymentCallback((payment) {
  if (payment.status == PaymentStatus.success) {
    print('Payment succeeded: ${payment.txId}');
  } else {
    print('Payment failed: ${payment.error}');
  }
});

5. 运行应用

完成上述步骤后,你可以运行你的Flutter应用,并测试与PI网络的交互功能。

flutter run
回到顶部