颤振如何聆听websocket的响应?
众所周知,“颤振”有一个使用websocket的示例,但它只接收websocket响应作为流,如下所示:颤振如何聆听websocket的响应?,websocket,dart,flutter,Websocket,Dart,Flutter,众所周知,“颤振”有一个使用websocket的示例,但它只接收websocket响应作为流,如下所示: new StreamBuilder( stream: widget.channel.stream, builder: (context, snapshot) { return new Text(snapshot.hasData ? '${snapshot.data}' : ''); }, ); @override void dispose() { widget.ch
new StreamBuilder(
stream: widget.channel.stream,
builder: (context, snapshot) {
return new Text(snapshot.hasData ? '${snapshot.data}' : '');
},
);
@override
void dispose() {
widget.channel.sink.close();
super.dispose();
}
我想要的是一个异步函数,它接收每个websocket响应并将结果附加到列表中,以便可以更新listview
如何以文本或json的形式获取websocket响应
更新:
我知道有一些方法像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();
});
这可以在一个页面中工作,但当再次进入该页面时,出现一个错误,显示错误状态:流已被侦听。
。
如何让每一个开始都能听到流,然后广播到许多页面
我想要的是一个接收每个websocket的异步函数
响应并将结果附加到列表中,以便可以创建listview
更新
您需要在state类中自己管理它
final list = List<Message>();
@override
Widget build(BuildContext context) {
return new StreamBuilder(
stream: myStream,
builder: (context, snapshot) {
list.add(/* extract message from snapshot */);
/* build a widget with your list */
},
);
}
final list=list();
@凌驾
小部件构建(构建上下文){
返回新的StreamBuilder(
流:myStream,
生成器:(上下文,快照){
添加(/*从快照中提取消息*/);
/*用你的列表构建一个小部件*/
},
);
}
当再次进入该页面时,出现了一个错误,显示为Bad state:Stream
已经听过了。。如何使溪流能被聆听
在每一个开始,然后广播到许多页
Dart具有单一订阅和广播流。查看有关的详细信息,以及如何。此处的建议在很大程度上取决于您的应用程序
这就是说,通常API会将流默认返回给单个订阅,然后使用asBroadcastStream()
选项
如果这不是一个选项,您可以创建一个中间StreamController
,它监听您的单个订阅流并返回一个广播流,您的应用程序的其余部分应该监听该广播流
以上关于创建流的链接概述了这两个选项。请确保在离开当前小部件时关闭WebSocket连接。在小部件的
State
类中,应该有一个dispose()
方法,如下所示:
new StreamBuilder(
stream: widget.channel.stream,
builder: (context, snapshot) {
return new Text(snapshot.hasData ? '${snapshot.data}' : '');
},
);
@override
void dispose() {
widget.channel.sink.close();
super.dispose();
}
您是否尝试过在StreamBuilder中返回ListView.builder如果您编写websocket后端,您可以让它在每次更新时返回完整列表,这样我就可以为您编写解决方案了。若它逐个返回一个项目,那个么您需要创建本地列表,将快照附加到其中,然后使用listviewbuilder@Tree您好,我正在使用websocket进行聊天,因此服务器的返回是一个接一个的,我需要监听流,并广播到我需要该流的任何页面(用发送者地址标识它们),这就像Telegrame之类的聊天应用程序,你找到解决方案了吗?@stt106还没有,websokcet会多次接收数据,每次用户界面更新……如果该页面关闭,如何在其他页面接收数据?(如果我正在构建聊天应用程序,则应在任何地方接收消息)