`StreamBuilder` — это виджет во Flutter, который строит UI на основе обновляющегося потока данных (`Stream`). Он слушает `Stream` и автоматически перестраивается при поступлении новых данных.
Если `FutureBuilder` работает один раз — ждет результат и строит виджет, то `StreamBuilder` реагирует на все обновления потока и пересобирает UI каждый раз.
Основные параметры
stream (Stream<T>)— обязательный
Асинхронный поток, за которым следит виджет.
builder (AsyncWidgetBuilder<T>)— обязательный
Функция, вызываемая при каждом обновлении потока. Получает `BuildContext` и `AsyncSnapshot<T>`.
initialData (T?)
Начальное значение, которое будет отображено до получения данных из потока.
Полезные свойства snapshot
`snapshot.connectionState` — состояние подключения к потоку (например, waiting, active, done).
`snapshot.hasData` — true, если данные успешно получены.
`snapshot.data` — сами полученные данные.
`snapshot.hasError` — true, если произошла ошибка.
`snapshot.error` — объект ошибки, если есть.
Каждое новое значение из потока вызывает перестроение виджета. Избегайте тяжёлых операций внутри `builder()`.
Аспект | StreamBuilder | FutureBuilder |
---|---|---|
Множественные обновления | Да | Нет, только один результат |
Подходит для событий | Да | Нет |
Использование во Flutter | Интерфейс обновляется на каждое событие | Интерфейс обновляется один раз |