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, които предоставят богат набор от инструменти за трансформация, филтриране и комбиниране на потоци.