我有一個用戶 ID 串列,我想從資料庫中為每個用戶獲取一個值并將其寫入一個新串列。但是for回圈不等待未來并拋出錯誤“Unhandled Exception: RangeError (index): Invalid value: Valid value range is empty: 0”
List userIDs = ["gsdgsgsgda32", "gwerszhgda7h", "fsdgz675ehds"];
Future <dynamic> getList() async {
List items=[];
for (var i = 0; i < userIDs.length; i ) {
items[i] = await getUserItems(userIDs[i]);
}
return items;
}
Future <String?> getUserItems(String? _userID) async {
String? userItem=" ";
final FirebaseApp testApp = Firebase.app();
final FirebaseDatabase database = FirebaseDatabase.instanceFor(app: testApp);
database.ref().child('users').child(_userID!).once().then((pdata) {
userItem = pdata.snapshot.child('item').value as String?;
});
return userItem;
}
uj5u.com熱心網友回復:
這不是未來的問題。串列項是空的,所以當你呼叫時items[0] = 3;沒有items[0],你會得到 RangeError。將元素添加到串列的正確方法是呼叫items.add(3)
所以你的代碼應該是這樣的:
List userIDs = ["gsdgsgsgda32", "gwerszhgda7h", "fsdgz675ehds"];
Future <dynamic> getList() async {
List items=[];
for (var i = 0; i < userIDs.length; i ) {
final item = await getUserItems(userIDs[i]);
items.add(item);
}
return items;
}
Future <String?> getUserItems(String? _userID) async {
String? userItem=" ";
final FirebaseApp testApp = Firebase.app();
final FirebaseDatabase database = FirebaseDatabase.instanceFor(app: testApp);
database.ref().child('users').child(_userID!).once().then((pdata) {
userItem = pdata.snapshot.child('item').value as String?;
});
return userItem;
}
uj5u.com熱心網友回復:
通過使用.then,您告訴 dart 繼續運行并在Future完成時回傳。相反,您應該在內部使用 await getUserItems。
你必須擺弄一下,但這里有一個建議:
Future <String?> getUserItems(String? _userID) async {
String? userItem=" ";
final FirebaseApp testApp = Firebase.app();
final FirebaseDatabase database = FirebaseDatabase.instanceFor(app: testApp);
userItem = (await database.ref().child('users').child(_userID!).once()).snapshot.child('item').value as String?
return userItem;
}
也String?用于 userItem 并將其設定" " 為有點反模式。既然你允許它可以為空,我建議將它作為空來寫你的邏輯。
uj5u.com熱心網友回復:
嘗試像這樣使用它
Future <dynamic> getList() async {
List items=[];
userIDs.forEach((item) async {
items.add(await getUserItems(item));
});
return items;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/484891.html
標籤:扑 火力基地 firebase-实时数据库
