我正在使用Flutter,Firebase Firestore和bloc模式编写应用程序。
打开应用程序后,我想从firestore数据库中加载一些书籍,为此,我定义了以下块代码:
@Consumes(MediaType.JSON_APPLICATION)
@DeleteMapping(value = "/delete")
在应用程序启动时,我使用以下代码加载书籍集:
@DeleteMapping(value = "/delete", consumes = MediaType.JSON_APPLICATION)
当书籍加载完毕后,我会收到通知,但是如果我调度了另一个这样的事件:
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));
方法中的其他快照,因此事件从未得到处理。
我该怎么做才能调度其他事件?
谢谢!