Что такое StreamBuilder в Flutter?

«Что такое StreamBuilder в Flutter?» — вопрос из категории Реактивное программирование, который задают на 36% собеседований Flutter Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

StreamBuilder — это виджет Flutter, который автоматически перестраивает свой дочерний виджет в ответ на новые данные из Stream. Он управляет подпиской на поток и предоставляет снимок (AsyncSnapshot) текущего состояния потока (ожидание, данные, ошибка, завершение).

Основные параметры:

  • stream: Stream, на который подписывается виджет.
  • builder: Функция, возвращающая виджет на основе AsyncSnapshot<T>.

Пример использования:

StreamBuilder<int>(
  stream: myCounterStream, // Stream<int>
  builder: (context, snapshot) {
    // Проверяем состояние потока
    if (snapshot.connectionState == ConnectionState.waiting) {
      return CircularProgressIndicator();
    }
    if (snapshot.hasError) {
      return Text('Ошибка: ${snapshot.error}');
    }
    // Данные доступны
    return Text('Значение: ${snapshot.data}');
  },
)

Практические нюансы:

  • StreamBuilder сам управляет жизненным циклом подписки — отписывается при демонтаже виджета.
  • Для потоков, которые должны существовать дольше жизни виджета (например, глобальное состояние), управление подпиской через StreamBuilder безопасно и удобно.
  • AsyncSnapshot.connectionState позволяет точно отображать состояние загрузки (waiting, active, done).