Flutter json_rpc_2实现

时间:2018-10-05 16:58:41

标签: dart flutter json-rpc

有人使用json_rpc_2包成功实现了WebSocket吗?https://pub.dartlang.org/packages/json_rpc_2

我尝试显示实时数据,例如来自此API的代码:https://api.hitbtc.com/

1 个答案:

答案 0 :(得分:0)

实际上,我设法解决了这个问题。这是代码:

import 'dart:convert';

import 'package:flutter/material.dart';
import 'package:json_rpc_2/json_rpc_2.dart' as json_rpc;
import 'package:web_socket_channel/io.dart';

class SymbolDetails extends StatelessWidget {
  final String symbolId;

  SymbolDetails({this.symbolId});

  @override
  Widget build(BuildContext context) {
    var _api = IOWebSocketChannel.connect('wss://api.hitbtc.com/api/2/ws');
    var client = json_rpc.Client(_api.cast());
    client.sendNotification(
      'subscribeTicker',
      {'symbol': '$symbolId'},
    );
    return Scaffold(
      appBar: AppBar(
        title: Text('$symbolId details'),
      ),
      body: StreamBuilder(
        stream: _api.stream,
        builder: (BuildContext context, AsyncSnapshot snapshot) {
          if (snapshot.connectionState == ConnectionState.none) {
            return Center(
              child: Text('Please check your internet connection'),
            );
          } else if (!snapshot.hasData) {
            return Center(child: CircularProgressIndicator());
          }
          String _snapshotData = snapshot.data;
          Map _response = json.decode(_snapshotData);
          return ListView(
            children: [
              ListTile(
                title: Text('Ask price:'),
                trailing: Text(
                  '${_response['params']['ask']}',
                  style: TextStyle(fontWeight: FontWeight.bold),
                ),
              ),
              ListTile(
                title: Text('Bid price:'),
                trailing: Text(
                  '${_response['params']['bid']}',
                  style: TextStyle(fontWeight: FontWeight.bold),
                ),
              ),
            ],
          );
        },
      ),
    );
  }
}