Flutter以太坊交互插件flutter_ethers的使用
Flutter以太坊交互插件flutter_ethers的使用
Flutter_Ethers 是一个 Dart 库,用于与以太坊区块链进行交互。它受到了 ethers.js 和 ethers 的启发。
安装
在 pubspec.yaml
文件中添加 Flutter_Ethers:
dependencies:
flutter_ethers:
在需要使用的文件中导入 Flutter_Ethers:
import 'package:flutter_ethers/flutter_ethers.dart';
使用
Provider
Provider 用于连接到以太坊节点并获取数据。
const provider = ethers.providers.JsonRpcProvider();
// 查看当前区块编号
final blockNumber = await provider.getBlockNumber();
print(blockNumber); // 输出: 14135476
// 获取账户余额(通过地址或ENS名称,如果网络支持)
final balance = await provider.getBalance("0x0000000000000000000000000000000000000000");
print(balance); // 输出: { BigInt: "10478645750785322678769" }
// 将输出格式化为更友好的形式,例如以太币(而不是wei)
print(ethers.utils.formatEther(balance)); // 输出: '10478.645750785321'
// 如果用户输入了一个字符串,可能需要将其从以太币(作为字符串)转换为wei(作为BigNumber)
print(ethers.utils.parseEther("1.0")); // 输出: { BigInt: "1000000000000000000" }
Wallet
Wallet 用于管理以太坊钱包,包括从助记词或私钥创建钱包实例。
// 从助记词创建钱包实例
final mnemonic = "announce room limb pattern dry unit scale effort smooth jazz weasel alcohol";
final walletMnemonic = Wallet.fromMnemonic(mnemonic);
// 从私钥创建钱包实例
final walletPrivateKey = Wallet(walletMnemonic.privateKey);
// 检查两个钱包实例是否具有相同的地址
print(walletMnemonic.address == walletPrivateKey.address); // 输出: true
// 通过Signer API获取地址
print(walletMnemonic.getAddress()); // 输出: '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1'
// 直接获取地址
print(walletMnemonic.address); // 输出: '0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1'
// 获取内部加密组件
print(walletMnemonic.privateKey); // 输出: '0x1da6847600b0ee25e9ad9a52abbd786dd2502fa4005dd5af9310b7cc7a3b25db'
print(walletMnemonic.publicKey); // 输出: '0x04b9e72dfd423bcf95b3801ac93f4392be5ff22143f9980eb78b3a860c4843bfd04829ae61cdba4b3b1978ac5fc64f5cc2f4350e35a108a9c9a92a81200a60cd64'
// 获取助记词信息
print(walletMnemonic.mnemonic);
// 输出: {
// locale: 'en',
// path: "m/44'/60'/0'/0/0",
// phrase: 'announce room limb pattern dry unit scale effort smooth jazz weasel alcohol'
// }
// 注意:使用私钥创建的钱包没有助记词
print(walletPrivateKey.mnemonic); // 输出: null
完整示例Demo
以下是一个完整的示例代码,展示了如何使用 Flutter_Ethers 插件来创建钱包并显示相关信息。
import 'package:flutter/material.dart';
import 'package:flutter_ethers/flutter_ethers.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Ethers Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MyHomePage(title: 'Flutter Ethers Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key, required this.title}) : super(key: key);
final String title;
[@override](/user/override)
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final mnemonic =
"announce room limb pattern dry unit scale effort smooth jazz weasel alcohol";
late Wallet walletMnemonic;
[@override](/user/override)
void initState() {
walletMnemonic = Wallet.fromMnemonic(mnemonic);
super.initState();
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Mnemonic: $mnemonic',
textAlign: TextAlign.center,
),
Text(
'PrivateKey: ${walletMnemonic.privateKey}',
textAlign: TextAlign.center,
),
Text(
'PublicKey: ${walletMnemonic.publicKey}',
textAlign: TextAlign.center,
),
Text(
'Address: ${walletMnemonic.address}',
textAlign: TextAlign.center,
),
],
),
),
);
}
}
更多关于Flutter以太坊交互插件flutter_ethers的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter以太坊交互插件flutter_ethers的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何在Flutter应用中使用flutter_ethers
插件与以太坊进行交互的代码示例。flutter_ethers
是一个用于与以太坊区块链进行交互的Flutter插件,它封装了Web3.js的许多功能,使得在Flutter应用中处理以太坊交易、查询余额等操作变得更加方便。
首先,确保你已经在pubspec.yaml
文件中添加了flutter_ethers
依赖:
dependencies:
flutter:
sdk: flutter
flutter_ethers: ^最新版本号 # 请替换为实际的最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,是一个简单的Flutter应用示例,展示如何使用flutter_ethers
连接到以太坊网络并查询一个账户的余额。
import 'package:flutter/material.dart';
import 'package:flutter_ethers/flutter_ethers.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String? balance;
@override
void initState() {
super.initState();
// 替换为你的Infura项目ID和以太坊账户地址
final String infuraProjectId = '你的Infura项目ID';
final String ethereumAddress = '你的以太坊账户地址';
// 初始化Ethers客户端
final ethersClient = EthersClient(
rpcUrl: 'https://$infuraProjectId.infura.io/v3/mainnet',
);
// 查询账户余额
ethersClient.getBalance(ethereumAddress).then((result) {
setState(() {
balance = ethers.utils.formatEther(result);
});
}).catchError((error) {
print('Error fetching balance: $error');
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Flutter Ethers Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Account Balance:',
style: TextStyle(fontSize: 20),
),
SizedBox(height: 10),
Text(
balance ?? 'Loading...',
style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold),
),
],
),
),
),
);
}
}
在这个示例中,我们做了以下几件事情:
- 初始化Ethers客户端:使用提供的Infura RPC URL初始化一个
EthersClient
实例。 - 查询账户余额:使用
ethersClient.getBalance
方法查询指定以太坊账户的余额,并将结果格式化为可读的以太币格式。 - 显示余额:在Flutter应用的UI中显示查询到的余额。
请注意,为了使这个示例工作,你需要:
- 拥有一个Infura账户,并获取一个项目ID。
- 替换代码中的
你的Infura项目ID
和你的以太坊账户地址
为实际的值。
此外,flutter_ethers
插件的功能远不止查询余额,它还可以用于发送交易、部署智能合约等。你可以查阅flutter_ethers
的官方文档以了解更多高级用法。