Nic*_*ela 6 stream websocket dart flutter
我有一个正在监听的 websocket 流:
widget.channel.stream.listen((data) {
print("!!!!new msg: $data");
var dataJson = json.decode(data);
print(dataJson["content"]);
// do my job
setState(() {
_allAnimateMessages.insert(0, newMsg);
});
newMsg.animationController.forward();
});
Run Code Online (Sandbox Code Playgroud)
但是,当再次进入该页面时,出现错误提示:
Bad state: Stream has already been listened to.
如何使它成为广播而其他页面可以接收该广播?
包web_socket_channel的解决方案:
final channel = IOWebSocketChannel.connect(socketUrl);
final streamController = StreamController.broadcast();
streamController.addStream(channel.stream);
Run Code Online (Sandbox Code Playgroud)
之后只需使用streamController.stream
监听网络套接字事件即可。
由于没有有用的答案,我在这里更新我的答案以供其他参考。
如果您只使用 StreamBuilder,则流只能监听一次。想想看,如果您的流可以监听许多其他页面或小部件,那么数据就会重复。
当开发一个复杂的应用程序时,确实可能会发生这种情况,例如,您正在构建一个聊天应用程序,新消息来了,您应该更新许多页面UI(您的对话框聊天UI,您的会话列表UI....),然后您应该在很多页面订阅这个流,我仍然没有找到正确的方法来做到这一点,除了让这个流被广播,并做你的工作。
归档时间: |
|
查看次数: |
3679 次 |
最近记录: |