websocket - Flutter如何监听websocket响应?
问题描述
众所周知,flutter 有一个使用 websocket 的例子,但它只是接收 websocket 响应作为流,就像这样:
new StreamBuilder(
stream: widget.channel.stream,
builder: (context, snapshot) {
return new Text(snapshot.hasData ? '${snapshot.data}' : '');
},
);
我想要的是一个异步函数,它接收每个 websocket 响应并将结果附加到列表中,以便可以更新列表视图。
无论如何,如何将 websocket 响应作为文本或 json 获取?
更新:我知道现在有一些类似 stream.listen 的方法:
widget.channel.stream.listen((data) {
print("!!!!new msg: $data");
var dataJson = json.decode(data);
print(dataJson["content"]);
// do something after received data
setState(() {
_allAnimateMessages.insert(0, newMsg);
});
newMsg.animationController.forward();
});
这可以在页面中工作,但是当再次进入该页面时,出现错误提示Bad state: Stream has already been listened to.
。如何使流可以在每次开始时被收听,然后广播到多个页面?
解决方案
确保在离开当前小部件时关闭 WebSocket 连接。在您的小部件的State
类中,您应该有一个如下所示的dispose()
方法:
@override
void dispose() {
widget.channel.sink.close();
super.dispose();
}
推荐阅读
- c# - 带有 SQL Server 的 C# - Datetime2(3) 字段的时间部分始终设置为 00:00:00:000
- javascript - 单个数组时间戳作为多个系列的 xAxis
- javascript - 如何使用回退方法在 Xamarin Forms iOS 中实现深度链接
- java - 获取当前正在播放的 Windows 媒体控制栏的歌曲?(爪哇)
- xml - 我们如何使用作为 cron 运行的 Jenkins 作业作为监控仪表板
- c# - XML序列化同一对象的不同elementName
- node.js - Node.js 客户端库对 Gmail API 的批量请求
- docker - 使用旧数据恢复结构网络时出现权限被拒绝错误
- flutter - Draggscroll图像颤动,可能吗?
- node.js - Lambda 节点“hello undefined”异步/等待不起作用?