原创 Dex_DQT
我们开始构建Flutter版本的Digging啦, 本章我们将完成环境的搭建以及获取钱包余额.
由于官方并没有提供Flutter的SDK, 根据Android篇通过json-rpc封装接口的基础, 在Flutter中我们需要完成rlp的序列化/反序列化, 以及使用ECDSA完成签名即可实现.
搭建工程
环境搭建大家可以参看 flutter中文网
下面我们创建工程, 因为Flutter是跨平台的, 本章笔者在windows上创建工程, 后面再切换到mac.
打开Android Studio, 然后打开File->New->New Flutter Project, 如下图
选择Flutter的SDK, 笔者使用的是2.8.1版本, 如下图
在配置面板, 把IOS和Android都选上
工程创建完成后目录如下图:
sdk包下, 如下图:
该sdk由笔者参考java版本的sdk编写的, 因此包名和类名基本和java版本一致.
使用SDK创建秘钥
main.dart的_MyHomePageState代码如下:
class _MyHomePageState extends State<MyHomePage> { String _address = ""; void _generateWallet() async { // 创建钱包 ECKeyPair ecKeyPair = WalletUtil.generatePlatONBip39Wallet(); Credentials credentials = Credentials.createByECKeyPair(ecKeyPair); setState(() { _address = credentials.address; print(_address); }); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text(widget.title), ), body: Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Text(_address), // 显示钱包地址 ElevatedButton( child: const Text("按钮"), onPressed: () { _generateWallet(); }, ), ], ), ), ); } }
在_generateWallet函数中我们通过WalletUtil.generatePlatONBip39Wallet,即可生成钱包, 效果如下图:
从图中看到我们生成的钱包地址为: lat19ydcsmfnxlqw4640u93r3chn2pk0c8shsn3lhg
我们在测试网给该地址领取LAT, 接着我们编写获取钱包余额的代码, 代码如下:
... 省略代码 void _getBalance() async { // 创建钱包 BigInt balance = await _web3.getBalance(_address); setState(() { _lat = AmountUtil.convertVonToLat(balance); }); } ... 省略代码
在这之前我们需要在main函数中, 初始化网络参数, 代码如下:
void main() { // 使用测试网 NetworkParameters.init(BigInt.from(210309), "lat"); // runApp(const MyApp()); }
在_MyHomePageState类中初始化Web3实例, 代码如下:
... 省略代码 // 创建web3对象 final Web3 _web3 = Web3.build("http://35.247.155.162:6789"); ... 省略代码
可以看到我们获取到钱包的余额.
好啦, 本章内容就到这里啦.
在Flutter篇中还是注重应用的实现, SDK的源码笔者不会着重去讲, SDK的功能也会随着本篇逐渐完善.
仓库地址: https://github.com/DQTechnology/Platon_DevGuideProject
本文转载自https://forum.latticex.foundation/t/topic/6020