flutter 自定義websocket路由的實現(xiàn)
在 flutter websocket 中 服務(wù)端推送數(shù)據(jù)給客戶端后 很多人的處理居然都是 if / switch; 感覺這樣的寫法不咋好!
自己想的一個辦法:
在 lib 目錄下新建一個 socket 目錄 里面創(chuàng)建兩個文件main.dart和router.dart;
main.dart : 主要控制websocket的連接 斷開 和收到消息的處理;
router.dart 則為websocket 服務(wù)端返回的消息做路由處理;
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; // 構(gòu)造函數(shù) 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 { // 例如服務(wù)端返回的大概是這樣一個json // {"cmd":"kick","data":{}} // {"cmd":"login","data":{}} Map params = json.decode(response); wsRouter.handle(params["cmd"], params["data"]); } onError(err) async {} onDone() async {} }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Flutter路由框架Fluro使用簡介
- Flutter如何完成路由攔截,實現(xiàn)權(quán)限管理
- Flutter開發(fā)中的路由參數(shù)處理
- Flutter app頁面路由以及路由攔截的實現(xiàn)
- 詳解Flutter的路由導(dǎo)航
- flutter 路由跳轉(zhuǎn)的實現(xiàn)示例
- Flutter開發(fā)之路由與導(dǎo)航的實現(xiàn)
- Flutter上線項目實戰(zhàn)記錄之路由篇
- Flutter利用注解生成可自定義的路由的實現(xiàn)
- Flutter 局部路由實現(xiàn)詳解
- Flutter路由的跳轉(zhuǎn)、動畫和傳參詳解(最簡單)
- Flutter 路由插件fluro的使用
相關(guān)文章
android中GridView實現(xiàn)點(diǎn)擊查看更多功能示例
本篇文章主要介紹了android中GridView實現(xiàn)點(diǎn)擊查看更多功能示例,非常具有實用價值,需要的朋友可以參考下。2017-02-02教你五分鐘實現(xiàn)Android超漂亮的刻度輪播控件實例教程
說到輪播圖,想必大家都不陌生,下面這篇文章主要給大家介紹了關(guān)于如何利用五分鐘快速實現(xiàn)一款超漂亮的Android刻度輪播控件的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧2018-09-09Windows下搭建Flutter開發(fā)環(huán)境
這篇文章介紹了Windows下搭建Flutter開發(fā)環(huán)境的方法,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-11-11Android實戰(zhàn)打飛機(jī)游戲之實現(xiàn)主角以及主角相關(guān)元素(3)
這篇文章主要為大家詳細(xì)介紹了Android實戰(zhàn)打飛機(jī)游戲之實現(xiàn)主角以及主角相關(guān)元素,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-07-07解決Error:All flavors must now belong to a named flavor dimens
這篇文章主要介紹了解決Error:All flavors must now belong to a named flavor dimension. Learn more at https://d.android.com,需要的朋友可以參考下2017-11-11Android中將一個圖片切割成多個圖片的實現(xiàn)方法
有種場景,我們想將一個圖片切割成多個圖片。比如我們在開發(fā)一個拼圖的游戲,就首先要對圖片進(jìn)行切割2013-05-05