flutter - Streamcontroller 未在颤动中打印先前的对象
问题描述
我正在向流控制器添加一个对象,但在打印过程中它只显示我添加的最后一个对象。不是以前的。那些正在迷路。当我添加一个新对象时,新对象只会显示,而以前的对象会丢失。例如,我添加了{"hello":"hi", }
3 次,但显示我只添加了 1 次。你能检查我的代码是否错误吗?这主要是一个聊天应用程序,所以每当有人发送消息时,它都会被添加到流控制器。这是流控制器
final socketResponse= StreamController();
Stream get getResponse =>socketResponse.stream;
@override
void dispose() {
socketResponse.close();
super.dispose();}
我使用添加了数据
RaisedButton(onPressed: (){ print("clicked"); socketResponse.add({"hello":"hi",}) ; },child: Text("click me"),),
使用以下代码监听数据
StreamBuilder(
stream: getResponse ,
builder: (BuildContext context, AsyncSnapshot snapshot){
`
if(!snapshot.hasData){
return CircularProgressIndicator();
}
return ListView.builder
(
itemCount:snapshot.data.length,
itemBuilder:(BuildContext context, index){
print(snapshot.data);
return ListTile(
title:Text(snapshot.data['hello']),
);
});
},
), `
当我点击按钮 5 次时 {"hello":"hi", } 将被添加 5 次但是当我打印流的值时只有 1 {"hello":"hi",} 被打印在这个对象所在的位置应该显示为 {"hello":"hi",},{"hello":"hi",},{"hello":"hi",},{"hello":"hi",},{ "hello":"hi",} this 建议我如何解决问题
解决方案
我不太确定如何使用streamController,所以我只给出了我通常在RxDart中使用的逻辑的方法
socketResponse.add({"hello":"hi",}) ; }
这用于将您的值添加到您的接收器中,因此它取代了在您的 StreamController 中不添加值,如果您想添加到您的接收器中,您需要从之前的接收器中获取值并添加到您的新接收器中
例如:
final Map<String,dynamic> value = socketResponse.value;
final Map<String,dynamic> tempMap = <String,dynamic>[];
tempMap.addAll(value);
socketResponse.add(value);
推荐阅读
- apache-superset - 超集,仅查看已发布的仪表板
- amazon-web-services - DynamoDB 适合高事务应用吗?
- python - 如何从 MATLAB 运行 Python
- javascript - 带有滚动条但没有调整大小选项的 div 溢出
- node.js - nodejs获取所有用户并仅返回用户名称,ID,图像不是所有数据
- javascript - 是否可以将“allDaySlot”选项与 TimelineView fullcalendar 一起使用?
- c# - SQL 数据库未“保存”通过代码 (C#) 添加的信息
- odata - 与 OData V2 关联的 setProperty
- google-sheets - 谷歌表格 IF&AND 函数给出了矛盾的结果
- mqtt - 我可以在thingsboard社区版中使用认领设备功能吗