I have following code:
class BidBloc extends Bloc<BidEvent, BidState> {
final FirestoreRepository firestoreRepository;
BidBloc({required this.firestoreRepository}) : super(BidsLoadingState()) {
on<LoadAllBidsEvent>((event, emit) async {
emit(BidsLoadingState());
Item item = event.item;
Future getBids() async {
List<Bid> bids = [];
item.bids?.forEach((element) async {
Bid? bid = await firestoreRepository.getBidByBidId(bidID: element);
if (bid != null) {
DbUser? dbUser = await firestoreRepository.getDBUserByDBUserId(
dbUserID: bid.bidderID);
if (dbUser != null) {
bid.userName = dbUser.userName;
bids.add(bid);
}
}
});
return bids;
}
List<Bid> bids = await getBids();
await getBids();
bids.sort((a, b) => a.timestamp.compareTo(b.timestamp));
BidsLoadedState(bids);
});
}
}
My bids.sort((a, b) => a.timestamp.compareTo(b.timestamp));
gets triggered before i retreive my itemss from my repository. Therefor the BidsLoadedState
gets pushed with empty bids also…
How can I make my code wait before going to the next line?
Thank you,
2
Answers
Try this:
You must not use
forEach
forasync
operations because its callback is aVoidCallback
and not anAsyncCallback
so it cannot return any value.Effective Dart propose to use
for
loops instead: