Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Использование Streams в Dart
Streams — основа реактивного программирования. Это последовательность асинхронных событий.
StreamController
final controller = StreamController<int>();
controller.sink.add(1);
controller.stream.listen((value) => print(value));
controller.close();
StreamBuilder для UI
StreamBuilder<int>(
stream: counterStream,
builder: (context, snapshot) {
if (snapshot.hasData) {
return Text("Count: ${snapshot.data}");
}
return CircularProgressIndicator();
},
)
Async generators
Stream<int> countStream() async* {
for (int i = 0; i < 10; i++) {
await Future.delayed(Duration(seconds: 1));
yield i;
}
}
Stream трансформации
map — преобразование
numberStream.map((n) => n * 2)
where — фильтрация
numberStream.where((n) => n % 2 == 0)
debounceTime — уменьшить частоту
searchStream.debounceTime(Duration(milliseconds: 500))
distinct — только новые значения
userStream.distinct()
BLoC Pattern
BLoC разделяет логику от UI через Streams.
class CounterBloc {
final _counter = StreamController<int>();
Stream<int> get count => _counter.stream;
void increment() => _counter.sink.add(_count + 1);
void dispose() => _counter.close();
}
Типичное использование
- Real-time данные — слушать обновления
- Пользовательский ввод — search, filters
- WebSocket — двусторонняя коммуникация
- Sensor data — GPS, accelerometer
- Notification — в реальном времени
Best Practices
- Всегда закрывай StreamControllers в dispose()
- Используй async* для создания Streams
- Обрабатывай ошибки через onError callback
- Используй StateManagement (Provider, Riverpod)
- Избегай утечек памяти через многократное слушание
Streams — мощный инструмент для асинхронного программирования в Flutter.