Flutter学习 — 使用WebSockets
图片一:
页面窗口
图片二:
输入内容,点击右下角发送,在输入框下面显示的是服务器返回的值
图片三:
再次输入内容,点击右下角发送,同样在输入框下面显示的是服务器返回的值
代码+注释:
import 'package:flutter/foundation.dart';
import 'package:web_socket_channel/io.dart';
import 'package:flutter/material.dart';
import 'package:web_socket_channel/web_socket_channel.dart';/**连接到WebSocket服务器。监听来自服务器的消息。将数据发送到服务器。关闭WebSocket连接。*/
void main() => runApp(new MyApp());class MyApp extends StatelessWidget {@overrideWidget build(BuildContext context) {final title = 'WebSocket Demo';return new MaterialApp(title: title,home: new MyHomePage(title: title,/// 连接到WebSocket服务器channel: new IOWebSocketChannel.connect('ws://echo.websocket.org'),),);}
}class MyHomePage extends StatefulWidget {final String title;final WebSocketChannel channel; // Web插口途径MyHomePage({Key key, @required this.title, @required this.channel}): super(key: key);@override_MyHomePageState createState() => new _MyHomePageState();
}class _MyHomePageState extends State<MyHomePage> {TextEditingController _controller = new TextEditingController();@overrideWidget build(BuildContext context) {return new Scaffold(appBar: new AppBar(title: new Text(widget.title),),body: new Padding(padding: const EdgeInsets.all(20.0),child: new Column(crossAxisAlignment: CrossAxisAlignment.start,children: <Widget>[new Form(child: new TextFormField(controller: _controller,decoration: new InputDecoration(labelText: 'Send a message'),),),/// 监听来自服务器的消息/// Widget将连接到一个Stream, 并在每次收到消息时通知Flutter重新构建界面。new StreamBuilder(//该Stream类是dart:async包中的一个基础类。它提供了一种方法来监听来自数据源的异步事件。与Future返回单个异步响应不同,Stream类可以随着时间推移传递很多事件。stream: widget.channel.stream,builder: (context, snapshot) {return new Padding(padding: const EdgeInsets.symmetric(vertical: 24.0),child: new Text(snapshot.hasData ? '${snapshot.data}' : ''),);},)],),),floatingActionButton: new FloatingActionButton(onPressed: _sendMessage,tooltip: 'Send message',child: new Icon(Icons.send),), // This trailing comma makes auto-formatting nicer for build methods.);}///将数据发送到服务器void _sendMessage() {if (_controller.text.isNotEmpty) { //只要文本框的值不为空///为了将数据发送到服务器,我们会add消息给WebSocketChannel提供的sink。widget.channel.sink.add(_controller.text);}}@overridevoid dispose() {/// 关闭WebSocket连接widget.channel.sink.close();super.dispose();}
}
喜欢记得点个赞哟,我是王睿,很高兴认识大家!
更多原理请参考谷歌官网:使用WebSockets
Flutter学习 — 使用WebSockets相关推荐
- Flutter学习指南:文件、存储和网络
Flutter学习指南 交互.手势和动画 UI布局和控件 熟悉Dart语言 编写第一个应用 开发环境搭建 本篇文章我们先学习 Flutter IO 相关的基础知识,然后在 Flutter学习指南:交互 ...
- flutter学习(排雷)一
flutter官网:https://flutter.dev/docs/get-started/install 终于下定决心开始flutter学习了呢. 首先需要说的是flutter中的配置文件真的很严 ...
- flutter scrollview_简单易上手的Flutter学习指南App,2020一起来玩转Flutter吧~
Flutter是谷歌的移动UI框架,可以快速在iOS.Android.Web和PC上构建高质量的原生用户界面. Flutter可以与现有的代码一起工作.在全世界,Flutter正在被越来越多的开发者和 ...
- Flutter学习笔记(10)--容器组件、图片组件
如需转载,请注明出处:Flutter学习笔记(10)--容器组件.图片组件 上一篇Flutter学习笔记(9)--组件Widget我们说到了在Flutter中一个非常重要的理念"一切皆为组件 ...
- Flutter学习日记之底部导航栏BottomNavigationBar组件的使用
本文地址:https://blog.csdn.net/qq_40785165/article/details/116953235,转载需附上此地址 大家好,我是小黑,一个还没秃头的程序员~~~ 空袋子 ...
- iOS程序猿的flutter学习之路
日常学习Flutter开发的积累 推荐一些平时自己学习Flutter开发当中接触到的优秀文章 -------------------------基础知识 ----------------------- ...
- Flutter 学习
Flutter 学习 参照:https://book.flutterchina.club/ 参照:https://flutter.cn/docs/development/platform-integr ...
- Flutter学习笔记 —— 完成一个简单的新闻展示页
Flutter学习笔记 -- 完成一个简单的新闻展示页 前言 思路分析 案例代码 结束语 上图 前言 刚学Flutter不久,今天我们来看看如何使用 Container & ListView实 ...
- Flutter学习-多子布局Widget
Flutter学习-多子布局Widget 1. Flex 2. Row组件 2.1 Row组件介绍 2.2 属性解析 2.2.1 mainAxisSize 2.2.2 mainAxisAlignmen ...
- Flutter学习(一)
目录 Flutter学习(一) Flutter学习(二)-FlutterGo学习 概念 参考:Flutter 开发文档 在 Flutter 中,几乎所有都是 widget,包括对齐 (alignmen ...
最新文章
- UVA10296 Jogging Trails(中国邮递员问题)(欧拉回路、一般图最大权匹配 / 状压DP)
- Android Hook神器——XPosed入门(登陆劫持演示)
- E - Counting Cliques HDU - 5952
- String的常用方法(java)
- HDU 6113 度度熊的01世界【DFS/Flood Fill】
- 最新版spark1.1.0集群安装配置
- 实现iOS长时间后台的两种方法:Audiosession和VOIP(转)
- 使用windows Builder的一个中文乱码问题解决
- VM虚拟机BT5下对usb无线网卡的配置
- Token验证失败的解决方法
- MES系统供应商评估报告-- Gartner出品
- excel函数公式html文档,excel公式embed怎么用
- Deep Graph Contrastive Representation Learning
- css内容超过宽度显示省略号没效果,文字超过两行折叠省略
- Pancake和import 语句——————————方法的重写
- php /x20有啥用,什么才是逆光摄影 用了全面屏vivo X20恍然大悟
- Maple学习笔记——数学计算与数据处理
- Ubuntu synaptic install
- 华为android9使用外置存储卡,华为Mate 9支持扩展储存卡吗?支持多大储存卡?
- BBC的英语发音技巧教学节目