Разбираемся с yield во Flutter
Начинающие Flutter-разработчики не всегда понимают, для чего нужно ключевое слово yield в Dart. Оно используется в генераторах Stream для пошаговой передачи данных. Это полезно в BLoC для управления состояниями и событиями.
Примеры использования yield в Dart:
1. Простой генератор:
Stream<int> countStream(int to) async* {
for (int i = 1; i <= to; i++) {
yield i; // Постепенно выдаёт числа от 1 до to
}
}
Так мы можем создать поток, который поочередно выдает числа от 1 до указанного значения.
2. Использование в BLoC
class CounterBloc extends Bloc<CounterEvent, CounterState> {
@override
CounterState get initialState => CounterInitial();
@override
Stream<CounterState> mapEventToState(
CounterEvent event,
) async* {
if (event is Increment) {
yield CounterLoading();
// Представим, что здесь какая-то асинхронная логика
yield CounterLoaded(newState);
}
}
}
Здесь yield используется для отправки различных состояний (например, загрузки и загруженного состояния) в ответ на события.
yield во Flutter — это мощный инструмент для создания асинхронных потоков данных и управления состояниями в BLoC. Он делает код более чистым, понятным и поддерживаемым. А если говорить совсем просто, то yield добавляет значение к выходу потока функции async*. Это как return, но он не завершает функцию.
Подписывайтесь на телеграм-канал руководителя нашего направления Flutter/iOS Саши Ворожищева, чтобы узнать про Flutter больше.