Sobes.tech
Middle

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

sobes.tech AI

Отговор от AI

Потоците във Flutter се използват за работа с последователности от асинхронни събития. Те са базирани на парадигмата на реактивното програмиране и предоставят начин за обработка на данните, докато пристигат.

Основни приложения на потоковете:

  • Актуализации на UI: Следене на промени в данните (например, от мрежови заявки или бази данни) и автоматично обновяване на widget-ите.
  • Комуникация между BLoC/Cubit и UI: BLoC/Cubit използват Stream (чрез StateStreamable) за излъчване на състояния, към които UI-то се абонира.
  • Обработка на входа на потребителя: Следене на събития на въвеждане (например, от текстови полета).
  • Работа с WebSocket и други асинхронни операции: Получаване на данни в реално време.

Основни концепции:

  • Stream: Последователност от асинхронни събития.
  • StreamController: Управлява потока, позволява добавяне на данни (add), грешки (addError) и затваряне на потока (close).
  • StreamSubscription: Обект, който представлява активна абонамент за потока. Позволява получаване на данни (onData), обработка на грешки (onError) и приключване на потока (onDone).

Пример с StreamBuilder:

// Предположим, че имаме поток, който излъчва цели числа
Stream<int> countStream = Stream.periodic(Duration(seconds: 1), (count) => count);

class MyWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return StreamBuilder<int>(
      stream: countStream, // Абониране за потока
      builder: (context, snapshot) {
        if (snapshot.connectionState == ConnectionState.waiting) {
          return CircularProgressIndicator(); // Докато потокът чака данни
        } else if (snapshot.hasError) {
          return Text('Грешка: ${snapshot.error}'); // Ако възникне грешка
        } else {
          return Text('Count: ${snapshot.data}'); // Показване на последните данни
        }
      },
    );
  }
}

Потоците могат да бъдат:

  • Single-subscription: Само един слушател може да бъде абониран по всяко време. Опитът да се абонира втори път ще доведе до грешка.
  • Broadcast: Множество слушатели могат да се абонират за един и същ поток. Данните се изпращат на всички активни слушатели.

За обработка на потоци често се използват оператори от пакета rxdart, които предоставят богат набор от инструменти за трансформация, филтриране и комбиниране на потоци.