Я пишу приложение, используя Flutter, Firebase Firestore и шаблон блока.
Когда приложение открывается, я хочу загрузить несколько книг из базы данных firestore, для этой цели я определил следующий код блока:
class EditorBloc extends Bloc<BookEvent, BooksState> {
@override
BooksState get initialState => BooksLoading();
EditorBloc();
Stream<BooksState> _loadBooks() async* {
final CollectionReference bookPostRef = Firestore.instance.collection('books');
try {
Stream<QuerySnapshot> stream = bookPostRef.snapshots();
await for (QuerySnapshot querySnapshot in stream) {
List<Book> remoteBooks = List();
for (var documentSnapshot in querySnapshot.documents) {
remoteBooks.add(Book.fromDocumentSnapshot(documentSnapshot));
}
yield BooksLoaded(remoteBooks);
// If I return here I can dispatch more events but not all the snapshots will be processed
}
} catch (_) {
yield BooksNotLoaded();
}
}
Stream<BooksState> _saveBooks(Gym gym, Sector sector, BookHistory booksHistory) async* {
// Some code
}
Stream<BooksState> _addBooks(Gym gym, Sector sector, BookHistory booksHistory) async* {
// Some code
}
@override
Stream<BooksState> mapEventToState(BooksState currentState, BookEvent event) async* {
if (event is LoadBooks) {
yield* _loadBooks(event.gym, event.sector);
} else if(event is SaveBooks) {
yield BooksLoading();
yield* _saveBooks(event.gym, event.sector, event.booksHistory);
} else if (event is AddBook) {
yield* _addBooks(gym, sector, booksHistory)
}
}
}
При запуске приложения я использую следующий код для загрузки коллекции книг:
myBloc.dispatch(LoadBooks());
И я получаю уведомление, когда книги загружаются, но если я отправляю другуюсобытие, подобное этому:
myBloc.dispatch(AddBook(newBook));
Событие никогда не обрабатывается, потому что EditorBloc
все еще ожидает другие снимки в методе _loadBooks
.
Что я должен сделать, чтобы иметь возможностьотправлять другие события?
Спасибо!