Flutter网络通信插件flutter_socket的使用

Flutter网络通信插件flutter_socket的使用

flutter_socket 是一个用于在 Flutter 中连接 WebSocket 的插件。它基于 Android 的 Java-WebSocket:1.4.0 插件实现,支持多种功能,如连接、断开、发送消息、心跳检测等。


开始使用

首先,在项目中引入插件:

dependencies:
  flutter_socket: ^版本号

然后,创建一个工具类来管理 WebSocket 连接。


1. 连接

使用工具类 FlutterWebSocketUtil 来连接 WebSocket 服务器。

示例代码:

final util = FlutterWebSocketUtil();

// 连接 WebSocket
util.connect(
  url: "ws://your-websocket-server-url",
  onClose: (SocketConnectCloseModel detail) {
    print('是否远程地址:${detail.remote}');
    print('连接被断开code:${detail.code}');
    print('连接被断开:${detail.message}');
  },
  onMessage: (String message) {
    print('收到消息:$message');
  },
  onOpen: (String url) {
    print('连接成功,地址是:$url');
  },
  onError: (String message) {
    print('连接失败:$message');
  },
);

说明:

  • url: 服务端的 WebSocket 地址。
  • onClose: 连接被断开时的回调。
  • onMessage: 接收到消息时的回调。
  • onOpen: 连接成功时的回调。
  • onError: 连接失败时的回调。

注意: 连接后会启动一个后台服务,通知栏可能会显示一个正在运行的通知。


2. 断开连接

通过调用 close() 方法断开连接。

示例代码:

util.close();

3. 开启心跳检测

为了保持连接活跃,可以开启心跳检测功能。

示例代码:

util.openHeart();

默认情况下,心跳检测每 30 秒触发一次。


4. 检测是否连接

可以通过静态方法 FlutterSocket.isOpen() 检查当前连接状态。

示例代码:

bool isConnected = FlutterSocket.isOpen();
print('是否已连接:$isConnected');

5. 发送消息

通过 send() 方法向服务器发送消息。

示例代码:

util.send("hello world");

工具类示例

以下是一个完整的工具类示例,封装了 WebSocket 的初始化和事件处理。

示例代码:

import 'package:flutter_socket/connect_close_model.dart';
import 'package:flutter_socket/flutter_socket_util.dart';

class WebSocketUtilsV3 {
  WebSocketUtilsV3._();

  static final WebSocketUtilsV3 _instance = WebSocketUtilsV3._();

  factory WebSocketUtilsV3() => _instance;

  final util = FlutterWebSocketUtil();

  // 初始化 WebSocket 连接
  Future<void> init() async {
    final _connectUrl = 'ws://your-websocket-server-url';
    util.connect(
      url: _connectUrl,
      onOpen: onOpen,
      onClose: onClose,
      onMessage: onMessage,
      onError: onError,
    );
  }

  // 连接成功回调
  void onOpen(String url) {
    print('连接成功啦;$url');
    util.openHeart(); // 开启心跳检测
  }

  // 连接关闭回调
  void onClose(SocketConnectCloseModel detail) {
    print('连接被断开啦:${detail.code}');
  }

  // 收到消息回调
  void onMessage(String message) {
    print('收到消息啦:$message');
  }

  // 连接失败回调
  void onError(String message) {
    print('连接错误啦:$message');
  }
}

运行示例

以下是运行示例的界面截图:

运行示例


完整示例代码

以下是一个完整的示例代码,展示了如何使用 flutter_socket 插件。

示例代码:

import 'dart:ui';

import 'package:flutter/material.dart';
import 'package:flutter_socket/connect_close_model.dart';
import 'package:flutter_socket/flutter_socket.dart';
import 'package:flutter_socket/flutter_socket_util.dart';

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

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

class _MyAppState extends State<MyApp> {
  final String _url = 'ws://your-websocket-server-url';
  final util = FlutterWebSocketUtil();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('WebSocket 示例'),
        ),
        body: Container(
          height: MediaQuery.of(context).size.height,
          width: MediaQuery.of(context).size.width,
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.center,
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              renderBtn("初始化连接", () {
                util.connect(
                  url: _url,
                  onClose: (SocketConnectCloseModel detail) {
                    print('是否远程地址:${detail.remote}');
                    print('连接被断开code:${detail.code}');
                    print('连接被断开:${detail.message}');
                  },
                  onMessage: (String message) {
                    print('收到消息:$message');
                  },
                  onOpen: (String url) {
                    print('连接成功,地址是:$url');
                  },
                  onError: (String message) {
                    print('连接失败:$message');
                  },
                );
              }),
              renderBtn("断开连接", util.close),
              renderBtn("开启心跳", util.openHeart),
              renderBtn("检测是否已经连接", FlutterSocket.isOpen),
              renderBtn("是否打开了GPS设置", () async {
                final isOpen = await FlutterSocket.gpsIsOpen();
                print('gps是否打开:$isOpen');
              }),
              renderBtn("打开gps设置页面", FlutterSocket.openGPSSystemPage),
            ],
          ),
        ),
      ),
    );
  }

  // 渲染按钮
  Widget renderBtn(String text, Function onTap) {
    return MaterialButton(
      color: Colors.blue,
      onPressed: onTap as VoidCallback,
      child: Text(
        '$text',
        style: TextStyle(color: Colors.white),
      ),
    );
  }
}
1 回复

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


在Flutter中,flutter_socket 是一个用于处理网络通信的插件,它允许你通过TCP或UDP协议进行数据传输。使用 flutter_socket 插件,你可以轻松地实现客户端与服务器之间的通信。

1. 添加依赖

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

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

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

2. 导入插件

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

import 'package:flutter_socket/flutter_socket.dart';

3. 创建Socket连接

你可以使用 FlutterSocket 类来创建和管理Socket连接。以下是一个简单的示例,展示如何创建一个TCP客户端并发送和接收数据。

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

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

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

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

class _SocketExampleState extends State<SocketExample> {
  FlutterSocket? _socket;
  String _response = '';

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

  void _connectToServer() async {
    _socket = FlutterSocket();
    await _socket!.connect('your.server.address', 1234); // 替换为你的服务器地址和端口

    _socket!.onData.listen((data) {
      setState(() {
        _response = String.fromCharCodes(data);
      });
    });

    _socket!.onError.listen((error) {
      print('Socket error: $error');
    });

    _socket!.onDone.listen((_) {
      print('Socket connection closed');
    });
  }

  void _sendMessage() async {
    if (_socket != null) {
      await _socket!.send('Hello, Server!'.codeUnits);
    }
  }

  [@override](/user/override)
  void dispose() {
    _socket?.dispose();
    super.dispose();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Socket Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text('Server Response: $_response'),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _sendMessage,
              child: Text('Send Message'),
            ),
          ],
        ),
      ),
    );
  }
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!