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

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

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

本项目是一个用于Coinbase云交易所的Dart SDK。

实时价格

开始使用

此项目是一个用于Coinbase交易所API的Dart SDK。该SDK允许你通过Coinbase WebSocket获取实时价格数据,并获取有关Coinbase和Coinbase Pro个人资料的信息。它还允许你在Coinbase Pro平台上进行加密货币交易。此包使用必须从Coinbase ProCoinbase Pro沙盒生成的API密钥。

为了确保你正确生成了密钥,创建一个名为test/secrets.dart的文件,内容如下:

class Secrets {
  static const String apiKey = ''; // 填入你的apiKey
  static const String secretKey = ''; // 填入你的secretKey
  static const String passphrase = ''; // 填入你的passphrase
}

然后在coinbase_exchange_test.dart文件中调用以下命令:

pub run test --chain-stack-traces test/coinbase_exchange_test.dart

这将默认执行Coinbase Pro沙盒中的测试,因此请确保你使用了正确的密钥。目前测试还不完整,仅测试了账户、Coinbase账户、转换和币种。

WebSocket Feed

WebSocket Feed允许你订阅特定的产品ID和通道以接收实时数据。

// 确保导入包时不要污染你的环境。
import 'package:coinbase_exchange/coinbase_exchange.dart' as cb;

// 创建一个WebSocket客户端实例
cb.WebsocketClient wsClient = cb.WebsocketClient(sandbox: false); // 设置是否为沙盒模式

// 订阅特定的产品ID和通道
var stream = wsClient.subscribe(
  productIds: ['BTC-USD'], // 指定要订阅的产品ID
  channels: [
    cb.ChannelEnum.heartBeat, // 订阅心跳通道
  ],
);

// 监听流中的事件
stream.listen((event) {
  print(event.toJson().toString()); // 打印接收到的事件
  wsClient.close(); // 关闭WebSocket连接
});

API

你可以使用API来获取账户信息等。

// 确保导入包时不要污染你的环境。
import 'package:coinbase_exchange/coinbase_exchange.dart' as cb;

// 获取账户列表
var accounts = await cb.accountsClient.listAccounts();

// 遍历并打印每个账户的货币类型
for (cb.Account account in accounts) {
  print(account.currency);
}

完整示例

以下是完整的示例代码:

import 'dart:async';
import 'package:candlesticks/candlesticks.dart' as graph;
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:coinbase_exchange/coinbase_exchange.dart' as cb;

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

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return const MaterialApp(
      title: 'Coinbase Exchange Demo',
      home: HomePage(),
    );
  }
}

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

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

class _HomePageState extends State<HomePage> {
  final _client = cb.WebsocketClient();
  final _streamController = StreamController.broadcast();
  final oCcy = NumberFormat("#,##0.00", "en_US");
  final _textStyle = const TextStyle(
    fontSize: 28.0,
    color: Colors.white70,
  );
  var btcPrice = '';
  var ethPrice = '';
  var ltePrice = '';

  // 初始化ProductsClient
  final cb.ProductsClient productsClient = cb.ProductsClient(
    apiKey: '', // 填入你的apiKey
    secretKey: '', // 填入你的secretKey
    passphrase: '', // 填入你的passphrase
  );

  [@override](/user/override)
  void initState() {
    _client.connect();
    _streamController.addStream(
      _client.subscribe(
        productIds: ['ETH-USD', 'BTC-USD', 'LTC-USD'], // 订阅的产品ID
        channels: [cb.ChannelEnum.ticker], // 订阅通道
      ),
    );
    super.initState();
  }

  [@override](/user/override)
  void dispose() {
    _client.close();
    _streamController.close();
    super.dispose();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: const Color(0xff113650),
        title: const Text(
          'Coinbase Exchange Demo',
          style: TextStyle(color: Colors.white70),
        ),
      ),
      body: Container(
        decoration: const BoxDecoration(
            gradient: LinearGradient(
          begin: Alignment.topLeft,
          end: Alignment.bottomRight,
          colors: [
            Color(0xff1d3f64),
            Color(0xff62467d),
          ],
        )),
        child: Center(
          child: Column(
            children: [
              FutureBuilder(
                future: productsClient.getProductCandles(
                  productId: 'BTC-USD',
                ),
                builder: (BuildContext context,
                    AsyncSnapshot<List<cb.Candle>> snapshot) {
                  if (snapshot.hasData) {
                    List<graph.Candle> candles = snapshot.data!
                        .map((e) => graph.Candle(
                              date: e.time!,
                              high: e.high!,
                              low: e.low!,
                              open: e.open!,
                              close: e.close!,
                              volume: e.volume!,
                            ))
                        .toList();
                    return AspectRatio(
                      aspectRatio: 1.2,
                      child: graph.Candlesticks(
                        candles: candles,
                        onIntervalChange: (_) async {},
                        interval: '1m',
                      ),
                    );
                  }
                  return Container();
                },
              ),
              const SizedBox(height: 28.0),
              StreamBuilder<dynamic>(
                stream: _streamController.stream,
                builder:
                    (BuildContext context, AsyncSnapshot<dynamic> snapshot) {
                  if (snapshot.connectionState == ConnectionState.none) {
                    return const Text('None');
                  } else if (snapshot.connectionState == ConnectionState.waiting) {
                    return const Text('Waiting...');
                  } else if (snapshot.connectionState == ConnectionState.active) {
                    var data = snapshot.data;
                    if (data is cb.StreamTicker) {
                      if (data.productId == 'ETH-USD') {
                        ethPrice = '\$' + oCcy.format(data.price);
                      } else if (data.productId == 'LTC-USD') {
                        ltePrice = '\$' + oCcy.format(data.price);
                      } else {
                        btcPrice = '\$' + oCcy.format(data.price);
                      }

                      return Column(
                        children: [
                          Text(
                            'Bitcoin Price: $btcPrice',
                            style: _textStyle,
                          ),
                          const SizedBox(height: 18.0),
                          Text(
                            'Litecoin Price: $ltePrice',
                            style: _textStyle,
                          ),
                          const SizedBox(height: 18.0),
                          Text(
                            'Etherium Price $ethPrice',
                            style: _textStyle,
                          ),
                        ],
                      );
                    } else {
                      return const Text('Something Else');
                    }
                  } else if (snapshot.connectionState == ConnectionState.done) {
                    return const Text('Done');
                  }
                  return Container();
                },
              ),
            ],
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是一个关于如何在Flutter应用中使用coinbase_exchange插件的示例代码。这个插件允许你与Coinbase Exchange API进行交互,进行加密货币交易等操作。请注意,实际使用时你需要注册并获得API密钥和密钥秘密。

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

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

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

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

  1. 配置API密钥和密钥秘密

在你的应用中,你需要配置你的Coinbase Exchange API密钥和密钥秘密。这些通常是通过环境变量或配置文件来管理的,但为了简单起见,这里直接在代码中硬编码(生产环境中应避免这种做法)。

  1. 初始化客户端

使用你的API密钥和密钥秘密初始化一个CoinbaseExchange客户端。

  1. 获取账户信息

使用客户端获取你的账户信息。

以下是一个完整的示例代码:

import 'package:flutter/material.dart';
import 'package:coinbase_exchange/coinbase_exchange.dart';
import 'dart:convert';

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String accountInfo = '';

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

  Future<void> _getAccountInfo() async {
    // 替换为你的API密钥和密钥秘密
    String apiKey = 'YOUR_API_KEY';
    String apiSecret = 'YOUR_API_SECRET';
    String passphrase = 'YOUR_PASSPHRASE'; // 如果你的API配置需要passphrase

    // 创建CoinbaseExchange客户端
    CoinbaseExchange client = CoinbaseExchange(apiKey, apiSecret, passphrase);

    try {
      // 获取账户信息
      Map<String, dynamic> response = await client.getAccounts();
      setState(() {
        accountInfo = jsonEncode(response);
      });
    } catch (e) {
      setState(() {
        accountInfo = 'Error: ${e.toString()}';
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Coinbase Exchange Example'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Text(accountInfo),
        ),
      ),
    );
  }
}

注意

  1. API密钥和密钥秘密:在实际应用中,你不应该在代码中硬编码这些敏感信息。考虑使用环境变量或安全的密钥管理服务。
  2. 错误处理:示例代码中的错误处理非常简单。在实际应用中,你可能需要更详细的错误处理和用户反馈。
  3. 权限和网络:确保你的应用有适当的网络权限,并且用户设备可以访问Coinbase Exchange API。
  4. API速率限制:注意Coinbase Exchange API的速率限制,避免因为过多的请求而被封禁。

这个示例展示了如何初始化CoinbaseExchange客户端并获取账户信息。你可以根据Coinbase Exchange API的文档进一步扩展功能,如创建订单、获取市场数据等。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!