#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, вы можете рассмотреть возможность инициализации прослушивателя потока и добавления новых данных при обнаружении изменений в потоке.