Streamcontroller не печатает предыдущий объект в flutter

#flutter #dart

#flutter #dart

Вопрос:

Я добавляю объект в контроллер потока, но во время печати он показывает только последний добавленный мной объект. Не предыдущие. Они теряются. Когда я добавляю новый объект, новый объект отображается только, а предыдущие теряются.Для примера я добавляю {"hello":"hi", } 3 раза, но он показывает, что я добавил только 1 раз. Можете ли вы проверить, неверен ли мой код? В основном это приложение для чата, поэтому всякий раз, когда кто-то отправляет сообщение, оно добавляется в stream controller. Это контроллер потока

 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 раз {«привет»:»привет»,
} будет добавлено 5 раз, но когда я печатаю значение stream, печатается только 1 {«привет»: «привет»,}
где, поскольку этот объект должен был отображаться как {«привет»:»привет»,},{«привет»: «привет»,},{«привет»: «привет»,},{«привет»: «привет»,}, {«привет»: «привет»,} это

подсказывает мне, как я могу решить проблему

Ответ №1:

Я не совсем уверен в том, как использовать 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);