websocket - 如何使 websocket 流广播到许多其他页面?
问题描述
我正在监听一个 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();
});
但是,当再次进入该页面时,出现错误:
Bad state: Stream has already been listened to.
如何使它成为广播并且其他页面可以接收该广播?
解决方案
您可以使用广播。
//Here is the solution
StreamController<String> streamController = new StreamController.broadcast(); //Add .broadcast here
//Now you can listen from various places
@override
void initState() {
super.initState();
print("Creating a StreamController...");
//First subscription
streamController.stream.listen((data) {
print("DataReceived1: " + data);
}, onDone: () {
print("Task Done1");
}, onError: (error) {
print("Some Error1");
});
//Second subscription
streamController.stream.listen((data) {
print("DataReceived2: " + data);
}, onDone: () {
print("Task Done2");
}, onError: (error) {
print("Some Error2");
});
streamController.add("This a test data");
print("code controller is here");
}
字体:https ://medium.com/@ayushpguptaapg/using-streams-in-flutter-62fed41662e4
使用广播时,您可以在同一流中拥有多个侦听器。
如果您只是使用没有“.broadcast()”的流,则只能有一个侦听器
推荐阅读
- excel - 自定义格式单元格以在 excel 中将破折号视为零
- authentication - 如何自动验证 Openfire 会议?
- yii2 - ajax保存后更新表单
- json - JMeter - Save complete JSON response of all the request to CSV file for test data preparation
- c# - 如何在 C# 的 BinaryFormatter 反序列化中使用 MaxArraySize?
- sql - 对 Postgres 的 Django 查询返回错误的列
- ios - 使用 Xcode 11.2 在 iOS 模拟器中打开 .app 时出错
- javascript - 从选择中获取自定义属性
- php - 当我转换 AD 时,Php DateTime 不起作用
- python - 如何使用 pcolor(或 imshow)绘制以每个 X、Y 散点为中心的颜色映射正方形