Flutter集成PI网络插件pi_flutter_sdk的使用
Flutter集成PI网络插件pi_flutter_sdk的使用
Soneso开放源码的Stellar SDK for Flutter是基于Dart构建的,提供了构建和签署交易的API,并可以连接和查询Horizon服务。
安装
从pub.dev
- 在你的
pubspec.yaml
文件中添加依赖:
dependencies:
pi_flutter_sdk: ^1.6.5
- 在命令行或IDE中安装它:
flutter pub get
- 在源文件中导入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包。以下是推荐的步骤:
- 克隆此仓库。
- 在你的IDE(例如Android Studio)中打开项目。
- 打开
pubspec.yaml
文件,并在IDE中按Pub get
。 - 转到项目的
test
目录,运行一个测试,你就可以开始使用了!
添加到你的应用中:
- 在你的Flutter应用中,在
pubspec.yaml
文件中添加本地依赖,然后运行pub get
:
dependencies:
flutter:
sdk: flutter
pi_flutter_sdk:
path: ../pi_flutter_sdk
- 在源文件中导入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}");
}
}
}
你可以使用limit
、order
和cursor
来定制查询。获取账户、账本和事务的最新付款。
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 检查其他
就像付款一样,你可以检查assets
、transactions
、effects
、offers
、operations
、ledgers
等。
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
更多关于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