我有以下代码:
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);
});
}
}
我的bids.sort((a, b) => a.timestamp.compareTo(b.timestamp));
在我从我的存储库中检索我的项目之前被触发。因此BidsLoadedState
也被空的出价推...
我怎样才能让我的代码在转到下一行之前等待?
谢谢你,
4条答案
按热度按时间hlswsv351#
不能将
forEach
用于async
操作,因为它的回调是VoidCallback
而不是AsyncCallback
,因此无法返回任何值。有效Dart建议使用
for
循环代替:jq6vz3qz2#
尝试Future for循环,如下所示:
lkaoscv73#
试试这个:
66bbxpm54#
我想这就是你要找的。具体来说,这篇文章中Irl的答案dart await on constructor