Flutter工作管理插件worken_sdk的使用

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

Flutter工作管理插件worken_sdk的使用

Paidwork

使用Worken发送和接收Solana上的安全区块链交易

🚀 超过2000万用户正在使用Worken!

GitHub Repository Stars Count Follow Us on X

Pub Commitizen friendly License PRs Welcome

SDK库提供了访问Worken的简单和安全的区块链交易的方法。更多关于Worken Token的信息,请点击这里阅读

配置

为了确保灵活性和易于集成,Worken SDK允许通过环境变量进行配置。这些变量可以直接在项目的.env文件中设置。以下是一些可用的配置变量及其描述:

要了解更多信息,请点击这里阅读

rpcUrl: rpcUrl
websocketUrl: websocketUrl

使用

安装

$ flutter pub add worken-sdk

初始化

import 'package:worken_sdk/worken_sdk.dart';
import 'package:solana/solana.dart';
import 'package:get_it/get_it.dart';

/// 即使不使用自己的路径也请设置
await WorkenSdk.setup(
      typeNet: typeNet
      provider: SolanaClient(rpcUrl, websocketUrl),
      locator: GetIt.instance, // 您的定位器
    );
参数 类型 描述
typeNet SolanaNet 如果provider为null,请设置typeNet (mainNet, devNet, testNet)
provider SolanaClient 如果想要使用自己的客户端
locator GetIt 如果想要使用自己的定位器

钱包

WorkenSdk.getWalletService(); /// 提取功能的服务

如果使用定位器,则也可以这样获取服务:

locator.get<WalletService>(); /// 从定位器获取服务

获取钱包余额

WorkenSdk.getWalletService().getBalance(address: address);
参数 类型 描述
address String 必须的参数,您的钱包地址

此结构详细描述了以WORK代币形式指定合同的钱包余额。 它返回包含以下数据的TokenAmount模型:

  • amount: 作为String - 作为字符串的原始令牌数量,忽略小数点
  • decimals: 作为int - 代币的铸币小数位数
  • uiAmountString: 作为String? - 考虑到小数点的令牌金额作为字符串

获取钱包交易历史

WorkenSdk.getWalletService().getTransactions(address: address);
参数 类型 描述
address String 必须的参数,您的钱包地址

此方法返回包含以下数据的TransactionSignatureInformation列表:

  • signature: 作为String - 交易签名作为base-58编码字符串
  • slot: 作为int - 包含交易的块所在的槽
  • err: 作为Map<String, dynamic>? - 包含错误详情
  • memo: 作为String? - 与交易关联的备注,如果没有备注则为null
  • blockTime: 作为int? - 估计的生产时间,作为处理交易时的Unix时间戳,如果不可用则为null
  • confirmationStatus: 作为ConfirmationStatus? - 交易的集群确认状态

创建新钱包

WorkenSdk.getWalletService().createWallet();

创建并初始化给定的bip39助记词字符串(12个单词)的SolanaWallet账户和change账户。 省略account或change意味着它们将为null,在这种情况下,null的含义如下: 如果account或change中的任何一个为null,而另一个不是,则则将其视为零

合约

WorkenSdk.getContractService(); /// 提取功能的服务

如果使用定位器,则也可以这样获取服务:

locator.get<ContractService>(); /// 从定位器获取服务

显示合约状态

WorkenSdk.getContractService().getContractStatus();

此方法返回与提供的Pubkey相关的所有信息

  • lamports: 作为int - 分配给该帐户的lamports数量,作为一个u64
  • owner: 作为String - 程序的base-58编码Pubkey,该程序已分配给此帐户
  • data: 作为AccountData? - 与帐户关联的数据,可以是编码二进制数据或JSON格式
  • executable: 作为bool - 帐户是否包含程序的布尔值
  • rentEpoch: 作为BigInt - 此帐户将在下一个租金周期的epoch,作为一个u64

交易

WorkenSdk.getTransactionService(); /// 提取功能的服务

如果使用定位器,则也可以这样获取服务:

locator.get<TransactionsService>(); /// 从定位器获取服务

准备交易

WorkenSdk.getTransactionService().prepareTransaction({
    required String sourcePrivateKey,
    required String sourceWallet,
    required String destinationWallet,
    required int amount});
参数 类型 描述
sourcePrivateKey String 必须的参数,发送者的私钥(base58编码)
sourceWallet String 必须的参数,接收者钱包地址
destinationWallet String 必须的参数,铸币地址
amount int 必须的参数,在WORKEN中的发送金额

此函数准备Worken SPL令牌的交易 它返回我们txHash String

发送交易

WorkenSdk.getTransactionService().sendTransaction();
参数 类型 描述
hashString String 必须的参数,准备好的txHash

此函数发送准备好的交易 它返回我们signature hash String

查看交易状态

WorkenSdk.getTransactionService().transactionStatus({required String signature});
参数 类型 描述
signature String 必须的参数,交易的签名字符串

此函数显示我们想要检查的交易的状态 它返回我们SignatureStatusesResult,其中包含以下数据:

  • slot: 作为int - 交易被处理的槽
  • confirmations: 作为ConfirmationStatus - 交易的集群确认状态
  • confirmationStatus: 作为int? - 自签名确认以来的块数,如果根化且最终确定,则为null
  • err: 作为Map<String, dynamic> - 错误消息

获取估算费用

WorkenSdk.getTransactionService().estimatedFee({required String message});
参数 类型 描述
message String 必须的参数,通常消息是我们哈希键

此函数返回我们int? - 我们将要支付的估算费用

显示最近的交易

WorkenSdk.getTransactionService().recentTransactions({required String mintAddress, required int limit});
参数 类型 描述
mintAddress String 必须的参数,您的铸币地址
limit int 必须的参数,我们想查看的交易数量

此函数返回我们List<TransactionSignatureInformation>,其中包含以下数据:

  • signature: 作为String - 交易签名作为base-58编码字符串
  • slot: 作为int - 包含交易的块所在的槽
  • err: 作为Map<String, dynamic> - 错误消息
  • memo: 作为String? - 与交易关联的备注,如果没有备注则为null
  • blockTime: 作为int? - 估计的生产时间,作为处理交易时的Unix时间戳,如果不可用则为null
  • confirmationStatus: 作为ConfirmationStatus? - 交易的集群确认状态

网络

WorkenSdk.getNetworkService(); /// 提取功能的服务

如果使用定位器,则也可以这样获取服务:

locator.get<NetworkService>(); /// 从定位器获取服务

显示区块信息

WorkenSdk.getNetworkService().blockInformation(blockNumber: blockNumber);
参数 类型 描述
blockNumber int 必须的参数,区块编号

此函数检索区块链上特定区块的详细信息。 它返回包含以下数据的Block模型:

  • blockhash: 作为String - 这个区块的区块哈希,作为base-58编码字符串
  • previousBlockhash: 作为String - 这个区块父区块的区块哈希,作为base-58编码字符串。如果由于账本清理导致父区块不可用,则此字段将返回1111..11
  • parentSlot: 作为int - 这个区块父区块的槽索引
  • transactions: 作为List<Transaction> - 如果请求了TransactionDetailLevel.full交易详细信息,则呈现。一个Transaction对象数组
  • meta: 作为Meta? - 交易状态元数据对象
  • signatures: 作为List<String> - 如果请求了TransactionDetailLevel.signatures交易详细信息,则呈现。一个字符串数组,对应于区块中交易的顺序
  • rewards: 作为List<Reward> - 如果请求了奖励,则呈现。一个Reward对象数组
  • blockTime: 作为int? - 估计的生产时间,作为Unix时间戳。如果不可用,则为None
  • blockHeight: 作为int? - 在此区块下的区块数量

显示网络状态

WorkenSdk.getNetworkService().networkStatus();

此函数返回一个NetworkStatusModel:

  • blockData: 作为int - 节点的当前区块高度
  • feeRate 作为int? - 网络将对特定Message收取的费用

监控网络拥堵

WorkenSdk.getNetworkService().monitorCongestion();

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

1 回复

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


当然,以下是一个关于如何在Flutter项目中使用worken_sdk插件来进行工作管理的示例代码。请注意,实际使用中可能需要根据worken_sdk的具体版本和API文档进行调整。

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

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

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

接下来,在你的Flutter项目中,你可以按照以下步骤使用worken_sdk

  1. 初始化Worken SDK

在应用的入口文件(通常是main.dart)中初始化worken_sdk

import 'package:flutter/material.dart';
import 'package:worken_sdk/worken_sdk.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化Worken SDK
  WorkenSDK.instance.initialize(
    clientId: 'your_client_id',  // 替换为你的客户端ID
    clientSecret: 'your_client_secret',  // 替换为你的客户端密钥
  );

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Worken SDK Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}
  1. 创建工作任务

在你的页面或逻辑中,你可以创建并管理工作任务。例如,在MyHomePage中:

import 'package:flutter/material.dart';
import 'package:worken_sdk/worken_sdk.dart';

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Worken SDK Demo'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () async {
            // 创建工作任务
            WorkenTask task = WorkenTask(
              title: 'Example Task',
              description: 'This is an example task.',
              // 根据需求添加其他任务属性
            );

            try {
              WorkenTaskResponse response = await WorkenSDK.instance.createTask(task);
              print('Task created successfully: ${response.taskId}');
            } catch (e) {
              print('Failed to create task: $e');
            }
          },
          child: Text('Create Task'),
        ),
      ),
    );
  }
}
  1. 获取并显示工作任务列表

你可以扩展上述代码,以获取并显示工作任务列表。

class _MyHomePageState extends State<MyHomePage> {
  List<WorkenTask> _tasks = [];

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

  Future<void> _fetchTasks() async {
    try {
      List<WorkenTask> tasks = await WorkenSDK.instance.getTasks();
      setState(() {
        _tasks = tasks;
      });
    } catch (e) {
      print('Failed to fetch tasks: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Worken SDK Demo'),
      ),
      body: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          ElevatedButton(
            onPressed: () async {
              // 创建工作任务的按钮(同上)
            },
            child: Text('Create Task'),
          ),
          SizedBox(height: 20),
          Expanded(
            child: _tasks.isEmpty
                ? Center(child: Text('No tasks found.'))
                : ListView.builder(
                    itemCount: _tasks.length,
                    itemBuilder: (context, index) {
                      WorkenTask task = _tasks[index];
                      return ListTile(
                        title: Text(task.title),
                        subtitle: Text(task.description),
                      );
                    },
                  ),
          ),
        ],
      ),
    );
  }
}

上述代码展示了如何在Flutter应用中使用worken_sdk插件来初始化SDK、创建工作任务以及获取并显示工作任务列表。请确保你已经替换了clientIdclientSecret为你在Worken平台上获取的实际值,并根据需要调整任务属性和其他细节。

注意:由于worken_sdk的具体API可能会随着版本更新而变化,因此建议查阅最新的官方文档以获取最准确的信息。

回到顶部