Flutter以太坊交互插件flutter_ethers的使用

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

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

1 回复

更多关于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),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

在这个示例中,我们做了以下几件事情:

  1. 初始化Ethers客户端:使用提供的Infura RPC URL初始化一个EthersClient实例。
  2. 查询账户余额:使用ethersClient.getBalance方法查询指定以太坊账户的余额,并将结果格式化为可读的以太币格式。
  3. 显示余额:在Flutter应用的UI中显示查询到的余额。

请注意,为了使这个示例工作,你需要:

  • 拥有一个Infura账户,并获取一个项目ID。
  • 替换代码中的你的Infura项目ID你的以太坊账户地址为实际的值。

此外,flutter_ethers插件的功能远不止查询余额,它还可以用于发送交易、部署智能合约等。你可以查阅flutter_ethers的官方文档以了解更多高级用法。

回到顶部