之前也碰到過,在Flutter中for循環(huán)中用wait并不生效,外層并不會等待所有for循環(huán)中wait事件,貌似找到過方案,后面也沒記錄,時間久了又忘了,這次記錄下。給你,給我留下印記~
一、錯誤示范
一開始我用的items.forEach來進行for循環(huán),并在里面使用wait關(guān)鍵值阻塞,外部調(diào)用也是用了wait關(guān)鍵字,但是外部的wait并不起作用,不會等待里面for循環(huán)wait全部執(zhí)行完再做操作。
如下代碼
void onUploadImages() async {
await onStoreAndUploadImages();
NavigatorUtil.pop(context,true);
}
Future<void> onStoreAndUploadImages() async {
List<int> items = _itemRotateQuarterTurns.keys.toList();
//并不會等待所有的子項都執(zhí)行完
items.forEach((element) async {
await generateAndStoreImage(element);
});
}
二、正確示范
后面將forEach改為for循環(huán)就解決了,置于為什么還沒去查證,后期有時間將會查證下,更新在本文中~
Future<void> onStoreAndUploadImages() async {
List<int> items = _itemRotateQuarterTurns.keys.toList();
for(int i = 0; i < items.length; i++){
await generateAndStoreImage(i);
}
}
三、Why
因為增強寫法forEach里面是個方法調(diào)用,所以他不是立刻生效的,而普通寫法就是在本方法里面
void forEach(void action(K key, V value));
我們可以看到forEach的參數(shù)其實是個方法,所以在這個action()方法里await應(yīng)該是沒有用的