首页 > 解决方案 > 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 建议我如何解决问题

标签: flutterdart

解决方案


我不太确定如何使用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);

推荐阅读