Sobes.tech
Junior

За какво се използват стриймовете във Flutter?

sobes.tech AI

Отговор от AI

Streams във Flutter се използват за обработка на последователности от асинхронни събития.

Основни случаи на употреба:

  1. Реагиране на промени в данните: Redux, BLoC моделите използват streams за управление на състоянието на приложението и реактивно обновяване на UI при промени.
  2. Работа с поточни данни: Получаване на данни по мрежата (например WebSocket), четене от файлове, работа със сензори на устройството.
  3. Обработка на взаимодействия с потребителя: Следене на скролване, Draggable / DragTarget.
  4. Асинхронни операции: Изпълнение на задачи във фонов режим и получаване на резултати, когато са готови.

Ключови понятия:

  • Stream: Последователност от асинхронни събития. Stream може да излъчва 0 или повече събития и след това да приключи (с успех или грешка).
  • StreamSubscription: Представлява абонамент за stream. Позволява получаване на събития от stream и управление на абонамента (спиране, възобновяване, анулиране).
  • Sink: Използва се за добавяне на данни към stream.
  • StreamBuilder: Widget, който се реконструира при получаване на нови данни от stream.
// Пример за използване на StreamBuilder
StreamBuilder<int>(
  stream: counterStream, // Вашият stream
  builder: (BuildContext context, AsyncSnapshot<int> snapshot) {
    if (snapshot.hasError) {
      return Text('Грешка: \\${snapshot.error}');
    }
    switch (snapshot.connectionState) {
      case ConnectionState.none:
        return Text('Очакване...');
      case ConnectionState.waiting:
        return CircularProgressIndicator();
      case ConnectionState.active:
        return Text('Стойност: \\${snapshot.data}');
      case ConnectionState.done:
        return Text('Stream приключи. Последна стойност: \\${snapshot.data}');
    }
  },
)
// Пример за прост stream, който излъчва числа
Stream<int> countStream(int max) async* {
  for (int i = 0; i <= max; i++) {
    await Future.delayed(Duration(seconds: 1));
    yield i; // Излъчване на стойност
  }
}