Flutter加密货币交易插件binance_spot_plus的使用

Flutter加密货币交易插件binance_spot_plus的使用

重要提示

本项目是从 binance_spot 分支出来的。由于原项目的依赖项与最新的 Flutter 版本不兼容,因此我对其进行了分叉并做了一些修改以使其兼容最新版本的 Flutter。

简介

这是一个用于 Binance SPOT API 的非官方 Dart 包。 目前它包括市场数据端点、子账户端点、钱包端点、现货账户/交易端点、法币端点,以及市场和用户数据流的支持。 如果您发现任何问题,请随时提交问题或拉取请求,我会很高兴接受它们。

目前支持的功能

  • 市场数据端点
  • 子账户端点
  • 钱包端点
  • 现货账户/交易端点
  • 法币端点
  • Websocket 市场流
  • 用户数据流

有用的链接

开始使用

安装

pubspec.yaml 文件中添加以下依赖:

dependencies:
  binance_spot: ^0.0.3

或者使用命令行安装:

flutter pub add binance_spot_plus

使用示例

下面是一个完整的示例,展示了如何使用 binance_spot_plus 插件来获取市场信息和用户数据流。

import 'dart:async';

import 'package:binance_spot/binance_spot_plus.dart';
import 'package:flutter/material.dart' hide Interval;

class HomePage extends StatefulWidget {
  const HomePage({Key? key}) : super(key: key);

  [@override](/user/override)
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  BinanceSpot binanceSpot = BinanceSpot(
    key: "<apiKey>",
    secret: "<apiSecret>",
  );
  double lastClosePrice = 0;
  String tradablePairs = "";
  String lastEventData = "";
  late StreamSubscription<dynamic> klineStreamSub;
  late StreamSubscription<dynamic> userdataStreamSub;

  [@override](/user/override)
  void initState() {
    startKlineStream();
    startUserdataStream();
    super.initState();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("Binance API 测试器"),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.center,
          children: [
            Text("当前 BTC 价格 : $lastClosePrice"),
            Text("最后的用户数据流事件 : $lastEventData"),
            TextButton(
              onPressed: getTradablePairs,
              child: const Text("获取对冲"),
            ),
            Expanded(
              flex: 1,
              child: SelectableText(
                tradablePairs,
                maxLines: 200,
                minLines: 1,
              ),
            ),
          ],
        ),
      ),
    );
  }

  void startKlineStream() {
    var stream = binanceSpot.klineStream(
      symbol: "BTCUSDT",
      interval: Interval.INTERVAL_5m,
    );
    klineStreamSub = stream.listen(handleNewKline);
  }

  void handleNewKline(WsKlineEvent event) {
    setState(() {
      lastClosePrice = event.kline.close;
    });
  }

  void startUserdataStream() async {
    var response = await binanceSpot.createListenKey();
    if (response.isRight) {
      var stream = binanceSpot.userDataStream(listenKey: response.right);
      userdataStreamSub = stream.listen(handleUserdataEvent);
    } else {
      lastEventData = response.left;
    }
  }

  void handleUserdataEvent(dynamic event) {
    if (event is WsAccountUpdate) {
      lastEventData = "账户更新事件 : ${event.balances.length} 个余额已更新";
    } else if (event is WsBalanceUpdate) {
      lastEventData = "余额更新事件 : ${event.asset} 余额已更新";
    } else if (event is WsExecutionReport) {
      lastEventData = "执行报告事件 : 状态为 ${event.orderStatus.toStr()}";
    } else if (event is WsListOrderStatus) {
      lastEventData = "订单列表更新事件 : 状态为 ${event.listOrderStatus}";
    } else {
      lastEventData = "未知事件类型 : ${event.toString()}";
    }
  }

  void getTradablePairs() async {
    var response = await binanceSpot.exchangeInfo();
    if (response.isLeft) {
      tradablePairs = response.left;
    } else {
      var listSymbol = response.right.symbols.map((e) => e.symbol).toList();
      tradablePairs = "";
      for (var s in listSymbol) {
        tradablePairs += "$s ";
      }
    }
  }

  [@override](/user/override)
  void dispose() {
    klineStreamSub.cancel();
    userdataStreamSub.cancel();
    super.dispose();
  }
}

更多关于Flutter加密货币交易插件binance_spot_plus的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter加密货币交易插件binance_spot_plus的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


binance_spot_plus 是一个用于在 Flutter 应用中与 Binance 现货交易 API 进行交互的插件。它提供了对 Binance API 的封装,使开发者能够方便地在 Flutter 应用中执行交易、查询账户信息、获取市场数据等操作。

以下是如何在 Flutter 项目中使用 binance_spot_plus 插件的基本步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 binance_spot_plus 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  binance_spot_plus: ^1.0.0  # 请检查最新版本

然后运行 flutter pub get 来获取依赖。

2. 导入插件

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

import 'package:binance_spot_plus/binance_spot_plus.dart';

3. 初始化 BinanceSpot 实例

你需要使用你的 Binance API 密钥和密钥来初始化 BinanceSpot 实例:

final binance = BinanceSpot(
  apiKey: 'YOUR_API_KEY',
  secretKey: 'YOUR_SECRET_KEY',
);

4. 使用 API 方法

binance_spot_plus 提供了多种方法来与 Binance API 进行交互。以下是一些常见的操作示例:

获取账户信息

void getAccountInfo() async {
  try {
    final accountInfo = await binance.getAccountInfo();
    print(accountInfo);
  } catch (e) {
    print('Error: $e');
  }
}

获取市场数据

void getMarketData() async {
  try {
    final marketData = await binance.getMarketData(symbol: 'BTCUSDT');
    print(marketData);
  } catch (e) {
    print('Error: $e');
  }
}

下单

void placeOrder() async {
  try {
    final order = await binance.placeOrder(
      symbol: 'BTCUSDT',
      side: OrderSide.BUY,
      type: OrderType.LIMIT,
      quantity: 0.001,
      price: 30000,
      timeInForce: TimeInForce.GTC,
    );
    print(order);
  } catch (e) {
    print('Error: $e');
  }
}

取消订单

void cancelOrder() async {
  try {
    final result = await binance.cancelOrder(symbol: 'BTCUSDT', orderId: '123456');
    print(result);
  } catch (e) {
    print('Error: $e');
  }
}

获取订单信息

void getOrderInfo() async {
  try {
    final orderInfo = await binance.getOrder(symbol: 'BTCUSDT', orderId: '123456');
    print(orderInfo);
  } catch (e) {
    print('Error: $e');
  }
}
回到顶部