Flutter钱包地址管理插件public_address_wallet的使用

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

Flutter钱包地址管理插件public_address_wallet的使用

引言

WalletConnect 连接移动与网页应用程序到支持的移动钱包。WalletConnect 会话可以通过扫描二维码(桌面)或点击应用深度链接(移动设备)启动。

安装完成后,您可以从钱包中获取验证地址。

使用方法

/// 创建一个连接器
var connector = WalletConnector(
    const AppInfo(name: "移动应用", url: "https://example.mobile.com"));
/// 创建需要打开的钱包
var rainbowMe = const Wallet(universalLink: 'https://rainbow.me/');
/// 获取地址
var address = await connector.publicAddress(wallet: rainbowMe).catchError((onError) {
  throw onError;
});

目前,该包已经包含了 Wallet.metamaskWallet.trustWalletWallet.rainbowMe 常量。

/// 默认情况下,包会打开 MetaMask
var address = await connector.publicAddress().catchError((onError) {
    throw onError;
});

如果您想自行打开钱包,请使用 initSession 并获取 URI:

connector.initSession((uri) {
    // 使用会话 URI 并通过您的方式连接到钱包
    print(uri);
});

完整示例

以下是完整的示例代码,展示了如何使用 public_address_wallet 插件来获取钱包地址。

import 'package:flutter/material.dart';
import 'package:public_address_wallet/public_address_wallet.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 示例',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(title: 'Flutter 示例首页'),
    );
  }
}

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> {
  String publicAddress = "";

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            if (publicAddress.isNotEmpty) ...{
              const Text("钱包中的公有地址:"),
              Text(
                publicAddress,
                style: const TextStyle(fontWeight: FontWeight.bold),
              )
            },
            TextButton(
                onPressed: () => startConnect(Wallet.metamask),
                child: const Text('开始连接 MetaMask')),
            TextButton(
                onPressed: () => startConnect(Wallet.trustWallet),
                child: const Text('开始连接 Trust Wallet')),
            TextButton(
                onPressed: () => startConnect(Wallet.rainbowMe),
                child: const Text('开始连接 Rainbow'))
          ],
        ),
      ),
    );
  }

  startConnect(Wallet wallet) async {
    final connector = WalletConnector(
        AppInfo(name: "移动应用", url: "https://example.mobile.com"));
    setState(() {
      publicAddress = '';
    });
    var address =
        await connector.publicAddress(wallet: wallet).catchError((onError) {
      print(onError);
      throw onError;
    });
    print(address);
    // 如果你想自己打开钱包
    // connector.initSession((uri) {
    //   print(uri);
    // });
    setState(() {
      publicAddress = address;
    });
  }
}

更多关于Flutter钱包地址管理插件public_address_wallet的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter钱包地址管理插件public_address_wallet的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用public_address_wallet插件来管理钱包地址的示例代码。假设public_address_wallet插件提供了基本的生成、存储和检索钱包地址的功能。请注意,实际插件的API可能会有所不同,这里是一个概念性的示例。

首先,确保你已经在pubspec.yaml文件中添加了public_address_wallet插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  public_address_wallet: ^latest_version  # 请替换为实际的最新版本号

然后,运行flutter pub get来安装依赖。

接下来,在你的Flutter项目中,你可以按照以下步骤使用public_address_wallet插件:

1. 导入插件

在你的Dart文件中导入插件:

import 'package:public_address_wallet/public_address_wallet.dart';

2. 生成新的钱包地址

使用插件提供的API生成一个新的钱包地址:

void generateNewWallet() async {
  try {
    Wallet wallet = await PublicAddressWallet.generateNewWallet();
    String publicKey = wallet.publicKey;
    String privateKey = wallet.privateKey;  // 注意:私钥应妥善保管,不应直接暴露
    String address = wallet.address;

    print("Public Key: $publicKey");
    print("Private Key: $privateKey");  // 仅用于调试,实际中应避免打印私钥
    print("Address: $address");
  } catch (e) {
    print("Error generating wallet: $e");
  }
}

3. 存储钱包地址(示例:使用SharedPreferences存储)

在实际应用中,你可能需要将钱包地址存储在安全的位置,如SharedPreferences或Keychain等。这里以SharedPreferences为例:

import 'package:shared_preferences/shared_preferences.dart';

Future<void> saveWalletAddress(String address) async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  await prefs.setString('wallet_address', address);
}

Future<String?> loadWalletAddress() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  return prefs.getString('wallet_address');
}

4. 检索并显示钱包地址

你可以从存储中检索钱包地址并在UI中显示:

void displayWalletAddress() async {
  String? address = await loadWalletAddress();
  if (address != null) {
    print("Stored Wallet Address: $address");
    // 更新UI以显示地址
  } else {
    print("No wallet address found.");
  }
}

5. 在Flutter应用中调用这些方法

你可以在Flutter应用的适当位置调用这些方法,例如在按钮点击事件中:

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Wallet Address Management'),
        ),
        body: WalletManagementPage(),
      ),
    );
  }
}

class WalletManagementPage extends StatefulWidget {
  @override
  _WalletManagementPageState createState() => _WalletManagementPageState();
}

class _WalletManagementPageState extends State<WalletManagementPage> {
  @override
  Widget build(BuildContext context) {
    return Center(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          ElevatedButton(
            onPressed: () async {
              await generateNewWallet();
              String? address = await loadWalletAddress();
              if (address != null) {
                await saveWalletAddress(address);
                ScaffoldMessenger.of(context).showSnackBar(
                  SnackBar(content: Text('Wallet generated and saved')),
                );
              }
            },
            child: Text('Generate and Save Wallet'),
          ),
          SizedBox(height: 20),
          ElevatedButton(
            onPressed: () async {
              await displayWalletAddress();
              String? address = await loadWalletAddress();
              if (address != null) {
                ScaffoldMessenger.of(context).showSnackBar(
                  SnackBar(content: Text('Wallet Address: $address')),
                );
              } else {
                ScaffoldMessenger.of(context).showSnackBar(
                  SnackBar(content: Text('No wallet address found')),
                );
              }
            },
            child: Text('Display Wallet Address'),
          ),
        ],
      ),
    );
  }
}

这个示例展示了如何在Flutter应用中集成public_address_wallet插件来生成、存储和检索钱包地址。请注意,实际插件的使用细节可能有所不同,因此请参考插件的官方文档以获取准确的API信息和最佳实践。

回到顶部