Flutter Solana钱包管理插件solana_wallet的使用

Flutter Solana钱包管理插件solana_wallet的使用

该Flutter插件提供了与Solana区块链无缝交互的功能。它支持发送SOL和SPL代币、获取钱包余额、连接到Solana网络等功能。为确保开发人员能够进行稳健、安全且高效的交易,此插件专为此目的而设计。

特性

  • 发送SOL:将原生SOL代币转移到任何Solana钱包地址。
  • 发送SPL代币:通过指定其铸币地址来转移任何SPL代币。
  • 获取余额:获取钱包的当前SOL或SPL代币余额。
  • 连接钱包:启用钱包连接和管理。
  • 网络配置:轻松在主网、测试网和开发网之间切换。

开始使用

要使用此插件作为库,请将其依赖项添加到项目中。

使用示例

以下是一个完整的示例,展示了如何使用solana_wallet插件进行各种操作。

Future<void> main() async {
  var solana = Solana();

  /// 获取具有唯一组合的12个单词助记词
  var seed = await solana.generateMnemonic();
  print("助记词:-  $seed");

  /// 使用12个单词助记词获取Solana地址
  var address = await solana.getSolanaAddress(mnemonic: seed);
  print("Solana 地址:- $address");

  /// 使用账户地址获取SOL代币余额
  var solBalance = await solana.getBalance(
      address: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX', // 替换为实际地址
      networkType: NetworkType.Devnet);
  print("SOL余额:- $solBalance");

  /// 测试助记词用于开发网
  String testseed =
      'annual route hard section online fall employ valve glow february box audit';

  /// 将SOL从一个账户转移到另一个账户
  await solana.sendSolCoin(
          receiverAddress: 'XXXXXXXXXXXXXXXXXXXXXXXXXXX', // 替换为实际接收地址
          amount: num.parse('0.01'),
          networkType: NetworkType.Devnet,
          mnemonic: testseed)
      .then((value) {
    print(value);

    /// 成功响应
    /// SUCCESS {status: Done, message: 46SSVqsikY1r6QVyZRu2mPnYxLBCuXkCWY5v9gtFScwRDWU935MTFMerK4sdANhdiM3eJZCgRUXcrwesguwHGEtE}
    /// 错误响应
    /// ERROR {status: Error, message: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}
  });

  /// 获取Solana代币余额
  var tokenBalance = await solana.getTokenBalance(
      address: address,
      tokenAddress: 'Token contract Address', // 替换为实际代币合约地址
      networkType: NetworkType.Devnet);
  print("代币余额:- $tokenBalance");

  /// 将Solana基础代币从一个账户转移到另一个账户
  await solana.sendToken(
          receiverAddress: 'XXXXXXXXXXXXXXXXXXXXXXXXXXXX', // 替换为实际接收地址
          tokenAddress: 'XXXXXXXXXXXXXXXXXXXXXXXXX', // 替换为实际代币合约地址
          amount: num.parse('0.01'),
          networkType: NetworkType.Devnet,
          mnemonic: testseed)
      .then((value) {
    print(value);

    /// 成功响应
    /// SUCCESS {status: Done, message: 46SSVqsikY1r6QVyZRu2mPnYxLBCuXkCWY5v9gtFScwRDWU935MTFMerK4sdANhdiM3eJZCgRUXcrwesguwHGEtE}
    /// 错误响应
    /// ERROR {status: Error, message: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX}
  });

  /// 使用代币地址获取Solana代币交易记录
  await solana
      .getTokenTransaction(
          walletAddress: 'XXXXXXXXXXXXXXX', // 替换为实际钱包地址
          tokenName: 'XXXXXX', // 替换为实际代币名称
          networkType: NetworkType.Mainnet)
      .then((value) {
    print(value);
  });
}

示例代码

以下是完整的示例代码,你可以通过GitHub链接查看源码:

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  // 此小部件是您的应用程序的根节点
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: const MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  const MyHomePage({super.key, required this.title});

  final String title;

  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0;

  void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Theme.of(context).colorScheme.inversePrimary,
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            const Text(
              '你已经点击了按钮这么多次:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headlineMedium,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: '增加',
        child: const Icon(Icons.add),
      ),
    );
  }
}

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

1 回复

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


当然,以下是一个关于如何在Flutter应用中使用solana_wallet插件管理Solana钱包的示例代码。这个示例将展示如何生成一个新的Solana钱包地址、显示公钥和私钥(注意:在实际应用中,私钥应该始终保密,这里仅作为演示用途)。

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

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

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

接下来,是一个简单的Flutter应用示例,展示如何使用solana_wallet插件:

import 'package:flutter/material.dart';
import 'package:solana_wallet/solana_wallet.dart';
import 'dart:typed_data';
import 'dart:convert';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Solana Wallet Management',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: SolanaWalletScreen(),
    );
  }
}

class SolanaWalletScreen extends StatefulWidget {
  @override
  _SolanaWalletScreenState createState() => _SolanaWalletScreenState();
}

class _SolanaWalletScreenState extends State<SolanaWalletScreen> {
  String? publicKey;
  String? privateKey;

  @override
  void initState() {
    super.initState();
    _generateWallet();
  }

  Future<void> _generateWallet() async {
    try {
      // 创建一个新的Solana钱包
      final wallet = await SolanaWallet.generate();
      
      // 获取公钥和私钥
      final publicKeyStr = wallet.publicKey.toBase58();
      final privateKeyStr = wallet.secretKey.toBase58();

      // 更新状态
      setState(() {
        publicKey = publicKeyStr;
        privateKey = privateKeyStr; // 注意:在实际应用中,不要这样做,私钥应该保密
      });
    } catch (e) {
      print('Error generating wallet: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Solana Wallet Management'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            Text(
              'Public Key:',
              style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
            ),
            SizedBox(height: 8),
            Text(
              publicKey ?? 'Generating...',
              style: TextStyle(fontSize: 16),
            ),
            SizedBox(height: 24),
            Text(
              'Private Key:',
              style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
            ),
            SizedBox(height: 8),
            Text(
              privateKey ?? 'Generating...',
              style: TextStyle(fontSize: 16, color: Colors.red), // 红色字体表示私钥,强调其重要性
            ),
          ],
        ),
      ),
    );
  }
}

注意事项:

  1. 私钥安全:在实际应用中,私钥必须严格保密。上面的示例仅用于演示目的,不应该在生产环境中直接显示私钥。
  2. 错误处理:在真实应用中,应该添加更完善的错误处理机制,以应对可能发生的各种异常情况。
  3. UI/UX:上述示例的UI非常简单,实际应用中应该设计更友好的用户界面,以提升用户体验。

这个示例展示了如何使用solana_wallet插件生成一个新的Solana钱包,并显示其公钥和私钥。根据实际需求,你可以进一步扩展这个示例,例如添加钱包导入/导出功能、签名交易等。

回到顶部