我正在嘗試列出一個實時資料庫。我有資料方式映射的問題,但我不明白如何解決。
我的代碼是:
Future<List<ProductoLeido>> getProductosEnGia() async {
List<ProductoLeido> prdEnGia = [];
try {
DatabaseEvent event =
await FirebaseDatabase.instance.ref().child('ProductosEnGIA').once();
if (event.snapshot.exists) {
DataSnapshot s = event.snapshot;
print("out forEach");
Map<String, Object?>.from(s.value as dynamic).forEach((key, value) => {
print('key:' key),
print("in forEach"),
});
}
return prdEnGia;
} catch (e) {
return prdEnGia;
}
}
回傳的是:
TypeErrorImpl(應為“Map<dynamic, dynamic>”型別的值,但得到“List”型別之一)
我正在附加影像以在除錯模式下共享更多資料。

uj5u.com熱心網友回復:
我做了一個快照值的輸出,結果是:
輸出
uj5u.com熱心網友回復:
看起來您正在讀取的資料具有順序的數字鍵,這意味著 Firebase SDK 將其映射到陣列/串列而不是映射。
所以而不是:
Map<String, Object?>.from(s.value as dynamic)
你會想要使用:
List<Object?>.from(s.value as dynamic)
我建議閱讀這篇博文以了解有關 Firebase 如何處理陣列的更多資訊:最佳實踐:Firebase 中的陣列。
uj5u.com熱心網友回復:
完畢。我解決問題。這就是解決方案:
Future<List<ProductoLeido>> getProductosEnGia() async {
List<ProductoLeido> prdEnGia = [];
try {
DatabaseEvent event =
await FirebaseDatabase.instance.ref().child('ProductosEnGIA').once();
if (event.snapshot.exists) {
DataSnapshot s = event.snapshot;
final m = s.value as List<dynamic>;
for (int i = 0; i < m.length; i ) {
final p = ProductoLeido.fromJson(m[i]);
print(m[i].toString());
Map<dynamic, dynamic> d = m[i];
ProductoLeido.fromJson(d);
var cod = ProductoLeido.fromJson(d).codigo;
var cant = ProductoLeido.fromJson(d).cantidad;
print('CODIGO>>>>' cod.toString());
ProductoLeido prL = ProductoLeido(cod, cant);
prdEnGia.add(prL);
}
}
return prdEnGia;
} catch (e) {
return prdEnGia;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/427319.html
標籤:扑 firebase-实时数据库
