Flutter网络通信插件better_socket_wrapper的使用

better_socket_wrapper #

better_socket_wrapper 是一个用于在 Flutter 中实现 WebSocket 通信的插件。它封装了底层的 WebSocket 连接逻辑,并提供了更简洁的 API 来处理连接、消息接收和错误处理。

使用步骤 #

以下是一个完整的示例,展示如何使用 better_socket_wrapper 插件来实现 WebSocket 的连接、发送消息和关闭连接。

1. 添加依赖

在项目的 pubspec.yaml 文件中添加 better_socket_wrapper 依赖:

dependencies:
  better_socket_wrapper: ^版本号

然后运行以下命令安装依赖:

flutter pub get

2. 初始化 WebSocket 连接

首先,我们需要初始化 WebSocket 连接并设置监听器。

import 'dart:convert';
import 'dart:typed_data';

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

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

class MyApp extends StatefulWidget {
  [@override](/user/override)
  _MyAppState createState() => _MyAppState();
}

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

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

  // 初始化平台状态
  Future<void> initPlatformState() async {
    String platformVersion;
    try {
      platformVersion = (await BetterSocketWrapper.platformVersion)!;

      // 设置监听器
      BetterSocketWrapper.addListener(
        onOpen: (httpStatus, httpStatusMessage) {
          print("WebSocket 连接成功 --- httpStatus:$httpStatus  httpStatusMessage:$httpStatusMessage");
        },
        onMessage: (message) {
          print("接收到消息 --- message:$message");
        },
        onClose: (code, reason, remote) {
          print("WebSocket 关闭 --- code:$code  reason:$reason  remote:$remote");
        },
        onError: (message) {
          print("发生错误 --- message:$message");
        },
      );

      // 配置 HTTP 头部并连接 WebSocket
      var headers = {"origin": "wss://api.matrixone.io/coinsdata/api/MarketsList/"};
      BetterSocketWrapper.connentSocket(
        "wss://api.matrixone.io/coinsdata/api/MarketsList/",
        httpHeaders: headers,
        trustAllHost: true,
      );
    } on Exception catch (e) {
      platformVersion = '连接失败: $e';
    }

    if (!mounted) return;

    setState(() {
      _platformVersion = platformVersion;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('WebSocket 示例'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Text('运行状态: $_platformVersion\n'),
              ElevatedButton(
                onPressed: () {
                  // 发送消息
                  var data = {"market": "USDT", "exchange": "BN"};
                  BetterSocketWrapper.sendByteMsg(Uint8List.fromList(jsonEncode(data).codeUnits));
                },
                child: Text('发送消息'),
              ),
              ElevatedButton(
                onPressed: () {
                  // 关闭 WebSocket 连接
                  BetterSocketWrapper.close();
                },
                child: Text('关闭连接'),
              ),
            ],
          ),
        ),
      ),
    );
  }

  [@override](/user/override)
  void dispose() {
    BetterSocketWrapper.close(); // 确保在组件销毁时关闭 WebSocket 连接
    super.dispose();
  }
}

更多关于Flutter网络通信插件better_socket_wrapper的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter网络通信插件better_socket_wrapper的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


better_socket_wrapper 是一个用于 Flutter 的第三方插件,旨在简化与 WebSocket 服务器的通信。它提供了更简洁的 API 来处理 WebSocket 连接、发送和接收消息。以下是如何在 Flutter 项目中使用 better_socket_wrapper 的基本步骤。

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 better_socket_wrapper 的依赖:

dependencies:
  flutter:
    sdk: flutter
  better_socket_wrapper: ^1.0.0  # 请使用最新版本

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

2. 导入包

在你的 Dart 文件中导入 better_socket_wrapper

import 'package:better_socket_wrapper/better_socket_wrapper.dart';

3. 创建 WebSocket 连接

使用 BetterSocketWrapper 创建一个 WebSocket 连接:

final socket = BetterSocketWrapper('ws://your.websocket.url');

4. 监听连接状态

你可以监听 WebSocket 的连接状态:

socket.onConnectionStatusChanged.listen((status) {
  print('Connection status: $status');
});

5. 发送消息

使用 send 方法发送消息到 WebSocket 服务器:

socket.send('Hello, WebSocket!');

6. 接收消息

监听 onMessageReceived 流来接收来自 WebSocket 服务器的消息:

socket.onMessageReceived.listen((message) {
  print('Received message: $message');
});

7. 处理错误

你可以监听 onError 流来处理错误:

socket.onError.listen((error) {
  print('Error: $error');
});

8. 关闭连接

使用 close 方法关闭 WebSocket 连接:

socket.close();

9. 完整示例

以下是一个完整的示例,展示如何使用 better_socket_wrapper 进行 WebSocket 通信:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: WebSocketExample(),
    );
  }
}

class WebSocketExample extends StatefulWidget {
  [@override](/user/override)
  _WebSocketExampleState createState() => _WebSocketExampleState();
}

class _WebSocketExampleState extends State<WebSocketExample> {
  final socket = BetterSocketWrapper('ws://your.websocket.url');
  final _controller = TextEditingController();
  String _receivedMessage = '';

  [@override](/user/override)
  void initState() {
    super.initState();
    socket.onConnectionStatusChanged.listen((status) {
      print('Connection status: $status');
    });

    socket.onMessageReceived.listen((message) {
      setState(() {
        _receivedMessage = message;
      });
    });

    socket.onError.listen((error) {
      print('Error: $error');
    });
  }

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

  void _sendMessage() {
    final message = _controller.text;
    socket.send(message);
    _controller.clear();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('WebSocket Example'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            TextField(
              controller: _controller,
              decoration: InputDecoration(labelText: 'Enter a message'),
            ),
            SizedBox(height: 16),
            ElevatedButton(
              onPressed: _sendMessage,
              child: Text('Send'),
            ),
            SizedBox(height: 16),
            Text('Received message: $_receivedMessage'),
          ],
        ),
      ),
    );
  }
}
回到顶部