flutter 自定义websocket路由的实现
在flutterwebsocket中服务端推送数据给客户端后很多人的处理居然都是if/switch;感觉这样的写法不咋好!
自己想的一个办法:
在lib目录下新建一个socket目录里面创建两个文件main.dart和router.dart;
main.dart:主要控制websocket的连接断开和收到消息的处理;
router.dart则为websocket服务端返回的消息做路由处理;
router.dart
import'package:lee/logic/user.dart'; typedefvoidRouteHandle(Mapparams); varwsRouter=newWsRouter(); classWsRouter{ staticMap_routers=newMap(); init(){ routers.forEach((route){ route.forEach((name,value){ this.add(name,value); }); }); } //增加路由 voidadd(Stringname,RouteHandlehandle){ WsRouter._routers[name]=handle; } //路由处理 Future handle(Stringname,Mapparams)async{ RouteHandlehandle=WsRouter._routers[name]; if(handle==null){ print("路由不存在"); return; } handle(params); } } List
main.dart
import'package:lee/socket/router.dart'; import'package:web_socket_channel/io.dart'; import'dart:convert'; varwebSocket=newWebSocket(); classWebSocket{ //webSocket连接 IOWebSocketChannelwebSocketChannel; factoryWebSocket()=>_webSocket(); staticWebSocket_instance; //构造函数 WebSocket._(){ //初始化webSocket路由 wsRouter.init(); } staticWebSocket_webSocket(){ if(_instance==null){ _instance=WebSocket._(); } return_instance; } conn(){ IOWebSocketChannelchannel=newIOWebSocketChannel.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":{}} Mapparams=json.decode(response); wsRouter.handle(params["cmd"],params["data"]); } onError(err)async{} onDone()async{} }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。