Flutter区块链操作插件flutterchain的使用
Flutter区块链操作插件flutterchain的使用
Flutter Chain
Flutterchain 是一个库,它为开发者提供了与不同区块链通信的简单API,并调用智能合约。通过使用 Flutterchain,开发者可以轻松地将流行的加密货币集成到他们的Web 3.0项目中。借助 Flutterchain,开发者可以构建强大的去中心化应用,而无需深入了解底层区块链技术。通过 Flutterchain,开发者可以轻松地与智能合约交互,发送转账等。这是一款易于使用且灵活的解决方案,适用于希望构建基于区块链的应用程序的开发者。
前提条件
在开始使用此库之前,请确保已安装以下依赖项或前提条件:
- Node JS
- 已安装 webpack(JavaScript包)
- 已安装 watch(JavaScript包)
- Flutter
- 已安装 Android Studio 和 Android SDK(用于Android开发)
- 已安装 Xcode(用于IOS和Mac OS开发)
构建
以下是构建库源码的步骤:
- 克隆此仓库:
git clone https://github.com/vlmoon99/flutterchain
- 导航到项目根目录:
cd flutterchain
- 运行
bash dev_build.sh
或bash prod_build.sh
以构建 flutterchain 库
如何使用
以下是使用 Flutterchain 的步骤:
-
在Web项目的头部添加以下代码:
<script type="application/javascript" src="/assets/packages/flutter_inappwebview_web/assets/web/web_support.js" defer ></script> <script type="application/javascript" src="/assets/packages/flutterchain/assets/crypto-lib/dist/bundle.js" defer ></script>
-
设置 Android: minSdkVersion >= 19,compileSdk >= 34,AGP版本 >= 7.3.0 在 android/app/build.gradle 文件中,并在 manifest 中添加 android:usesCleartextTraffic=“true”
-
向 Android manifest 添加网络权限:
<uses-permission android:name="android.permission.INTERNET"/>
-
注入所有依赖项,例如使用 Modular 或 Get 它,或者使用提供的类中的默认构造函数(不推荐)
-
在 main 函数中初始化 flutterchain 库,在 WidgetsFlutterBinding.ensureInitialized() 之后调用:
WidgetsFlutterBinding.ensureInitialized(); await initFlutterChainLib();
要执行所有区块链操作,您需要创建私钥和公钥。为此,您有两个选项:
-
使用生成助记词创建钱包(使用 Trust Wallet Core):
Wallet wallet = await cryptoLibrary.createWalletWithGeneratedMnemonic(walletName: walletName);
如果您想从其他地方导入助记词,可以使用以下代码:
Wallet wallet = await cryptoLibrary.createWalletByImportedMnemonic(mnemonic: mnemonic!, walletName: walletName);
-
如果您仅使用服务来签名和发送交易,您可以使用以下方法生成区块链数据(在此示例中,我将使用 Near 区块链):
final nearBlockChainService = NearBlockChainService.defaultInstance(); NearBlockChainData blockchainData = nearBlockChainService.getBlockChainDataFromMnemonic(your_mnemonic,your_passphrase);
一旦您获得了包含私钥和公钥的区块链数据,您就可以轻松地与区块链进行通信。
您可以使用我的库来签署交易。首先,您可以只用于签署交易。要签署任何交易,您需要使用 BlockchainServices。目前,我只支持 Near 区块链。
final nearBlockChainService = NearBlockChainService.defaultInstance();
// 1. 获取来自 Near 区块链的 nonce 和 blockhash 信息(或使用您自己的实现方法)。
final transactionInfo = await nearBlockChainService.getNonceAndBlockHashInfo(
accountId: fromAddress,
publicKey: publicKey,
);
// 2. 获取 gas 信息。
final gas = BlockchainGas.gas[BlockChains.near];
// 3. 定义动作。所有可能的动作可以在我的资产 /crypto-lib(我的库内的 JavaScript 项目)NearBlockchain 类中找到。
final actions = [
{
"type": "transfer",
"data": {"amount": NearFormatter.nearToYoctoNear(transferAmount)}
}
];
// 4. 签名动作
final signedAction = await nearBlockChainService.signNearActions(
fromAddress: fromAddress,
toAddress: toAdress,
transferAmount: NearFormatter.nearToYoctoNear(transferAmount),
privateKey: privateKey,
gas: gas,
nonce: transactionInfo.nonce,
blockHash: transactionInfo.blockHash,
actions: actions,
);
log("Result of signed the tx ${signedAction}");
// 5. 将交易发送到 Near 区块链并获取响应(或使用您自己的 Near RPC 网络客户端)。
final res = await nearBlockChainService.nearRpcClient.sendSyncTx([signedAction]);
log("Result of transaction executing -> ${res.toJson().toString()}");
另外,您可以一起使用整个库。您可以在库中的 flutterchain_arch.drawio 文件中查看架构。
(重要)要一起使用我的库,请确保您熟悉依赖注入(DI)原则。首先,您可以在示例文件夹中的 modules 文件夹(example/lib/modules)内看到一个示例。您可以看到我在 .module.dart 文件中如何初始化依赖项。之后,您可以进入组件和页面(example/lib/modules/home/components/chains/near)并查看我如何使用我的库。
简而言之,我有一个包含 BlockchainServices 和一些 Repository(目前仅支持 Wallet 模型)的库。我还拥有一个当前钱包的流。FlutterChainLibrary 类提供了使用 WEB 3.0 的高级API。您可以发送原生代币转账,调用智能合约等。
例如:
final response = cryptoLibrary.sendTransferNativeCoin(
walletId: walletId,
typeOfBlockchain: typeOfBlockchain,
toAddress: toAddress,
currentDerivationPath: currentDerivationPath,
transferAmount: NearFormatter.nearToYoctoNear(transferAmount),
);
log(response.toJson().toString());
// walletId 是 walletsStream 中的钱包ID。您可以从中获取钱包,并提供钱包的区块链类型和派生路径(https://github.com/satoshilabs/slips/blob/master/slip-0044.md ,https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki)。
如果您需要某些特定功能,可以从 FlutterChainService 获取:
final nearBlockChainService = cryptoLibrary.blockchainService
.blockchainServices[BlockChains.near] as NearBlockChainService?;
并使用 NearBlockChainService 中的函数。
更多关于Flutter区块链操作插件flutterchain的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter区块链操作插件flutterchain的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter项目中使用flutterchain
插件进行区块链操作的简单示例。请注意,flutterchain
可能是一个虚构的插件名称,因为在实际开发中,Flutter社区可能没有一个广泛认可的、名为flutterchain
的区块链操作插件。不过,我会根据常见的区块链操作需求,提供一个基于Flutter和Dart语言的示例,假设你有一个类似的插件可以使用。
首先,你需要在你的pubspec.yaml
文件中添加对flutterchain
(假设存在)的依赖:
dependencies:
flutter:
sdk: flutter
flutterchain: ^x.y.z # 替换为实际的版本号
然后运行flutter pub get
来安装依赖。
接下来,我将展示一个如何在Flutter中使用这个插件进行简单区块链操作的示例。这个示例将包括初始化区块链客户端、查询区块链信息和发送交易。
import 'package:flutter/material.dart';
import 'package:flutterchain/flutterchain.dart'; // 假设这是你的区块链插件
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Blockchain Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: BlockchainScreen(),
);
}
}
class BlockchainScreen extends StatefulWidget {
@override
_BlockchainScreenState createState() => _BlockchainScreenState();
}
class _BlockchainScreenState extends State<BlockchainScreen> {
late BlockchainClient _client;
String _blockchainInfo = '';
String _transactionStatus = '';
@override
void initState() {
super.initState();
// 初始化区块链客户端
_client = BlockchainClient('YOUR_API_KEY'); // 替换为你的API密钥或连接参数
}
Future<void> fetchBlockchainInfo() async {
try {
var info = await _client.getBlockchainInfo();
setState(() {
_blockchainInfo = info.toString();
});
} catch (e) {
setState(() {
_blockchainInfo = 'Error fetching blockchain info: $e';
});
}
}
Future<void> sendTransaction() async {
try {
var transaction = Transaction(
fromAddress: 'SENDER_ADDRESS',
toAddress: 'RECEIVER_ADDRESS',
amount: 1.0, // 假设是某种数字货币的金额
currency: 'CURRENCY_CODE',
);
var result = await _client.sendTransaction(transaction);
setState(() {
_transactionStatus = result.status.toString();
});
} catch (e) {
setState(() {
_transactionStatus = 'Error sending transaction: $e';
});
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Blockchain Demo'),
),
body: Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
children: <Widget>[
Button(
onPressed: fetchBlockchainInfo,
child: Text('Fetch Blockchain Info'),
),
Text(_blockchainInfo),
SizedBox(height: 20),
Button(
onPressed: sendTransaction,
child: Text('Send Transaction'),
),
Text(_transactionStatus),
],
),
),
);
}
}
// 假设的区块链客户端类
class BlockchainClient {
String apiKey;
BlockchainClient(this.apiKey);
// 假设的获取区块链信息方法
Future<Map<String, dynamic>> getBlockchainInfo() async {
// 这里应该是调用API并返回信息的代码
// 为了示例,我们直接返回一个模拟的Map
return {
'blocks': 1000,
'difficulty': 10,
'network': 'testnet',
};
}
// 假设的发送交易方法
Future<TransactionResult> sendTransaction(Transaction transaction) async {
// 这里应该是调用API并发送交易的代码
// 为了示例,我们直接返回一个模拟的TransactionResult
return TransactionResult(status: 'success');
}
}
// 假设的交易类
class Transaction {
String fromAddress;
String toAddress;
double amount;
String currency;
Transaction({
required this.fromAddress,
required this.toAddress,
required this.amount,
required this.currency,
});
}
// 假设的交易结果类
class TransactionResult {
String status;
TransactionResult({required this.status});
}
// 简单的按钮组件,用于演示
class Button extends StatelessWidget {
final VoidCallback onPressed;
final Widget child;
Button({required this.onPressed, required this.child});
@override
Widget build(BuildContext context) {
return ElevatedButton(
onPressed: onPressed,
child: child,
);
}
}
请注意,上述代码是一个高度简化和假设的示例,用于演示如何在Flutter应用中集成和使用一个区块链插件。在实际应用中,你需要根据具体的区块链插件API文档来实现相应的功能。此外,处理敏感信息(如API密钥和私钥)时,请务必采取适当的安全措施。