Flutter WebSocket通信插件flutter_web_socket的使用

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

Flutter WebSocket通信插件flutter_web_socket的使用

flutter_web_socket 是一个用于建立WebSocket连接并与WebSocket服务器交互的Dart包。以下是详细使用步骤和示例代码。

连接到WebSocket

要连接到WebSocket服务器,请使用flutter_web_socket包提供的connectToWebSocket方法,并提供WebSocket服务器URL作为参数来建立连接。

使用步骤

1. 添加依赖

在你的pubspec.yaml文件中添加flutter_web_socket依赖:

dependencies:
  flutter_web_socket: ^1.0.2

2. 导入包

在你的Dart文件中导入该包:

import 'package:flutter_web_socket/flutter_web_socket.dart';

3. 建立WebSocket连接

使用connectToWebSocket方法建立WebSocket连接。将所需的WebSocket服务器URL作为参数传递:

void main() async {
  // 示例WebSocket URL
  String socketUrl = 'wss://socketsbay.com/wss/v2/1/demo/';

  // 尝试建立WebSocket连接
  WebSocket webSocket = await connectToWebSocket(socketUrl: socketUrl);

  if (webSocket != null) {
    // WebSocket连接成功,可以开始与服务器交互
    webSocket.listen(
      (data) {
        print('Received message: $data');
      },
      onError: (error) {
        print('Error occurred: $error');
      },
      onDone: () {
        print('WebSocket connection closed');
      },
    );

    // 向服务器发送消息
    webSocket.add('Hello, Server!');

    // 关闭WebSocket连接(如果需要)
    // webSocket.close();
  } else {
    // WebSocket连接失败
    print('WebSocket connection failed.');
  }
}

完整示例Demo

下面是一个完整的Flutter应用示例,展示了如何使用flutter_web_socket进行WebSocket通信:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'WebSocket Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: WebSocketPage(),
    );
  }
}

class WebSocketPage extends StatefulWidget {
  @override
  _WebSocketPageState createState() => _WebSocketPageState();
}

class _WebSocketPageState extends State<WebSocketPage> {
  WebSocket? _webSocket;
  String _message = '';
  List<String> _messages = [];

  void _connectWebSocket() async {
    String socketUrl = 'wss://socketsbay.com/wss/v2/1/demo/';
    _webSocket = await connectToWebSocket(socketUrl: socketUrl);

    if (_webSocket != null) {
      _webSocket!.listen(
        (data) {
          setState(() {
            _messages.add('Received: $data');
          });
        },
        onError: (error) {
          print('Error occurred: $error');
        },
        onDone: () {
          print('WebSocket connection closed');
        },
      );

      // 发送初始消息
      _sendMessage('Hello, Server!');
    } else {
      print('WebSocket connection failed.');
    }
  }

  void _sendMessage(String message) {
    if (_webSocket != null && _webSocket!.readyState == WebSocket.open) {
      _webSocket!.add(message);
      setState(() {
        _messages.add('Sent: $message');
      });
    }
  }

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

  @override
  void dispose() {
    _webSocket?.close();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('WebSocket Demo'),
      ),
      body: Column(
        children: <Widget>[
          Expanded(
            child: ListView.builder(
              itemCount: _messages.length,
              itemBuilder: (context, index) {
                return ListTile(
                  title: Text(_messages[index]),
                );
              },
            ),
          ),
          Padding(
            padding: const EdgeInsets.all(8.0),
            child: Row(
              children: <Widget>[
                Expanded(
                  child: TextField(
                    onChanged: (value) {
                      _message = value;
                    },
                    decoration: InputDecoration(hintText: "Enter a message"),
                  ),
                ),
                IconButton(
                  icon: Icon(Icons.send),
                  onPressed: () {
                    _sendMessage(_message);
                  },
                ),
              ],
            ),
          ),
        ],
      ),
    );
  }
}

这个示例应用展示了如何使用flutter_web_socket插件进行WebSocket通信,包括连接、发送和接收消息等功能。你可以根据实际需求进一步扩展此示例。


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

1 回复

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


当然,下面是一个使用 flutter_web_socket 插件进行 Flutter WebSocket 通信的示例代码。这个示例展示了如何连接到 WebSocket 服务器、发送消息以及接收消息。

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

dependencies:
  flutter:
    sdk: flutter
  flutter_web_socket: ^2.0.0  # 请使用最新版本

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

接下来是示例代码:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: WebSocketScreen(),
    );
  }
}

class WebSocketScreen extends StatefulWidget {
  @override
  _WebSocketScreenState createState() => _WebSocketScreenState();
}

class _WebSocketScreenState extends State<WebSocketScreen> {
  final String webSocketUrl = "ws://your-websocket-server-url";
  WebSocketClient? _webSocketClient;
  TextEditingController _controller = TextEditingController();
  List<String> _messages = [];

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

  @override
  void dispose() {
    super.dispose();
    _controller.dispose();
    _webSocketClient?.close();
  }

  void connectToWebSocket() {
    _webSocketClient = WebSocketClient(webSocketUrl)
      ..onOpen = (() {
        print("WebSocket connection opened");
        setState(() {
          _messages.add("Connected to WebSocket server");
        });
      })
      ..onMessage = ((WebSocketMessage message) {
        print("WebSocket message received: ${message.payload}");
        setState(() {
          _messages.add("Received: ${message.payload}");
        });
      })
      ..onClose = (() {
        print("WebSocket connection closed");
        setState(() {
          _messages.add("Disconnected from WebSocket server");
        });
      })
      ..onError = ((error) {
        print("WebSocket error: ${error.message}");
        setState(() {
          _messages.add("Error: ${error.message}");
        });
      })
      ..connect();
  }

  void sendMessage() {
    if (_webSocketClient?.readyState == WebSocketReadyState.OPEN) {
      _webSocketClient?.send(WebSocketMessage.text(_controller.text));
      setState(() {
        _messages.add("Sent: ${_controller.text}");
        _controller.clear();
      });
    } else {
      setState(() {
        _messages.add("WebSocket connection is not open");
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Flutter WebSocket Example"),
      ),
      body: Padding(
        padding: const EdgeInsets.all(8.0),
        child: Column(
          children: [
            Expanded(
              child: ListView.builder(
                itemCount: _messages.length,
                itemBuilder: (context, index) {
                  return ListTile(
                    title: Text(_messages[index]),
                  );
                },
              ),
            ),
            TextField(
              controller: _controller,
              decoration: InputDecoration(
                border: OutlineInputBorder(),
                labelText: 'Message',
              ),
              onSubmitted: (value) {
                sendMessage();
              },
            ),
            Button(
              onPressed: sendMessage,
              child: Text('Send'),
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中:

  1. WebSocketClient 被用来建立 WebSocket 连接。
  2. 连接成功、收到消息、连接关闭和发生错误时分别调用了不同的回调函数。
  3. sendMessage 方法用于发送消息到 WebSocket 服务器。
  4. 使用了 TextFieldButton 来输入和发送消息。

请将 ws://your-websocket-server-url 替换为你的 WebSocket 服务器实际 URL。

这个示例展示了基本的 WebSocket 通信功能,你可以根据需要进行扩展和修改。

回到顶部