как установить состояние внутри streambuilder

#flutter #stream-builder #statefulwidget

#flutter #stream-builder #statefulwidget

Вопрос:

У меня есть StreamBuilder внутри виджета с отслеживанием состояния, который получает данные асинхронно с сервера. Кроме того, у меня есть список, который собирает эти данные.

 StreamBuilder(   
  stream: myStream.stream,   
  initialData: initData,   
  builder: (BuildContext context, AsyncSnapshot snapshot) {
        switch(snapshot.connectionState){
          case (Connection.active):
            setState(() { 
              data = data   snapshot.data;
            });
            break;
          default: 
            break;
        }   
      } 
)
  

Если я сделаю это, я получу setState() or markNeedBuild() was called during build .

Как мне решить эту проблему?

Комментарии:

1. используйте, например Stream.map() , метод для объединения потоковых данных

2. @pskink не stream.map() предназначен для преобразования входящих данных? Я пытаюсь собрать данные.

3. @pskink я не понимаю, что вы подразумеваете под возвращением оригинала event

4. stream.map((событие) {foo = событие; возвращает событие;})

5. кстати, проверьте api.flutter.dev/flutter/widgets/StreamBuilder-class.html , он гласит: «Перестройка виджета запланирована для каждого взаимодействия с использованием State.setState, но в остальном не связана с синхронизацией потока. Конструктор вызывается по усмотрению конвейера Flutter и, таким образом, получит зависящую от времени подпоследовательность снимков, которые представляют взаимодействие с потоком. »

Ответ №1:

Flutter StreamBuilder не нужно вызывать setState для перестройки своих дочерних элементов. StreamBuilder перестраивается по умолчанию при обнаружении изменений в потоке. Если не требуется перестраивать виджеты внутри StreamBuilder, вы можете рассмотреть возможность инициализации прослушивателя потока и добавления новых данных при обнаружении изменений в потоке.