这篇文章主要介绍了flutter 自定义websocket路由的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
在 flutter websocket 中 服务端推送数据给客户端后 很多人的处理居然都是 if / switch; 感觉这样的写法不咋好!
自己想的一个办法:
在 lib 目录下新建一个 socket 目录 里面创建两个文件main.dart和router.dart;
main.dart : 主要控制websocket的连接 断开 和收到消息的处理;
router.dart 则为websocket 服务端返回的消息做路由处理;
router.dart
import 'package:lee/logic/user.dart';
typedef void RouteHandle(Map params);
var wsRouter = new WsRouter();
class WsRouter {
static Map<String, RouteHandle> _routers = new Map();
init() {
routers.forEach((route) {
route.forEach((name, value) {
this.add(name, value);
});
});
}
// 增加路由
void add(String name, RouteHandle handle) {
WsRouter._routers[name] = handle;
}
// 路由处理
Future<void> handle(String name, Map params) async {
RouteHandle handle = WsRouter._routers[name];
if (handle == null) {
print("路由不存在");
return;
}
handle(params);
}
}
List<Map<String, RouteHandle>> routers = [
{"login": UserLogic.login},
{"kick": UserLogic.kick},
];
main.dart
import 'package:lee/socket/router.dart';
import 'package:web_socket_channel/io.dart';
import 'dart:convert';
var webSocket = new WebSocket();
class WebSocket {
// webSocket连接
IOWebSocketChannel webSocketChannel;
factory WebSocket() => _webSocket();
static WebSocket _instance;
// 构造函数
WebSocket._() {
// 初始化webSocket路由
wsRouter.init();
}
static WebSocket _webSocket() {
if (_instance == null) {
_instance = WebSocket._();
}
return _instance;
}
conn() {
IOWebSocketChannel channel = new IOWebSocketChannel.connect(
"ws://127.0.0.1:8080/ws",
pingInterval: Duration(milliseconds: 100));
channel.stream
.listen((data) => onMessage(data), onError: onError, onDone: onDone);
this.webSocketChannel = channel;
}
onMessage(response) async {
// 例如服务端返回的大概是这样一个json
// {"cmd":"kick","data":{}}
// {"cmd":"login","data":{}}
Map params = json.decode(response);
wsRouter.handle(params["cmd"], params["data"]);
}
onError(err) async {}
onDone() async {}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程学习网。
沃梦达教程
本文标题为:flutter 自定义websocket路由的实现
基础教程推荐
猜你喜欢
- Android实现短信验证码输入框 2023-04-29
- iOS Crash常规跟踪方法及Bugly集成运用详细介绍 2023-01-18
- iOS开发使用XML解析网络数据 2022-11-12
- IOS获取系统相册中照片的示例代码 2023-01-03
- Android Compose自定义TextField实现自定义的输入框 2023-05-13
- iOS中如何判断当前网络环境是2G/3G/4G/5G/WiFi 2023-06-18
- iOS开发 全机型适配解决方法 2023-01-14
- Flutter进阶之实现动画效果(三) 2022-10-28
- Android开发Compose集成高德地图实例 2023-06-15
- MVVMLight项目Model View结构及全局视图模型注入器 2023-05-07