如何通过Map<>将快照键值拉入列表?
How to pull snapshot key & values into list through Map<>?
我一直在关注使用实时数据库的官方 Firebase 教程:https://www.youtube.com/watch?v=sXBJZD0fBa4
我能够从 firebase 实时数据库中提取所有数据。然而,下面的方法提供了一个数据列表,没有引用父键(snapshot.key)。理想的情况是在项目 class (item.key) 中有一个键 属性,这样我就可以直接从列表中调用它。
class DatabaseModel {
final itemsRef = FirebaseDatabase.instance.ref().child('/Contents');
Stream<List<Items>> getItemssStream() {
final itemsStream = itemsRef.onValue;
final streamToPublish = itemsStream.map((event) {
final itemsMap = Map<String, dynamic>.from(event.snapshot.value as Map<String, dynamic>);
final itemsList = itemsMap.entries.map((element) {
return Items.fromRTDB(Map<String, dynamic>.from(element.value));
}).toList();
return itemsList;
});
return streamToPublish;
}
}
class Items{
final String item;
final String expiryDate;
final String quantity;
final String user;
Items({required this.item, required this.expiryDate, required this.quantity, required this.user});
//Mapping from real-time database
factory Items.fromRTDB(Map<String, dynamic> data) {
return Items(
item: data['item'],
expiryDate: data['exp'],
quantity: data['qty'],
user: data['user'],
);
}
}
在此代码中,您仅在结果中使用每个节点的 element.value
:
return Items.fromRTDB(Map<String, dynamic>.from(element.value));
如果您还想获得每个项目的密钥,您还必须在其中使用 element.key
并将其传递给您的 Items
对象。
像这样:
Items.fromRTDB(element.key, Map<String, dynamic>.from(element.value));
...
class Items{
final String key;
final String item;
final String expiryDate;
final String quantity;
final String user;
Items({required this.key, required this.item, required this.expiryDate, required this.quantity, required this.user});
//Mapping from real-time database
factory Items.fromRTDB(String key, Map<String, dynamic> data) {
return Items(
key: key,
item: data['item'],
expiryDate: data['exp'],
quantity: data['qty'],
user: data['user'],
);
}
}
我一直在关注使用实时数据库的官方 Firebase 教程:https://www.youtube.com/watch?v=sXBJZD0fBa4
我能够从 firebase 实时数据库中提取所有数据。然而,下面的方法提供了一个数据列表,没有引用父键(snapshot.key)。理想的情况是在项目 class (item.key) 中有一个键 属性,这样我就可以直接从列表中调用它。
class DatabaseModel {
final itemsRef = FirebaseDatabase.instance.ref().child('/Contents');
Stream<List<Items>> getItemssStream() {
final itemsStream = itemsRef.onValue;
final streamToPublish = itemsStream.map((event) {
final itemsMap = Map<String, dynamic>.from(event.snapshot.value as Map<String, dynamic>);
final itemsList = itemsMap.entries.map((element) {
return Items.fromRTDB(Map<String, dynamic>.from(element.value));
}).toList();
return itemsList;
});
return streamToPublish;
}
}
class Items{
final String item;
final String expiryDate;
final String quantity;
final String user;
Items({required this.item, required this.expiryDate, required this.quantity, required this.user});
//Mapping from real-time database
factory Items.fromRTDB(Map<String, dynamic> data) {
return Items(
item: data['item'],
expiryDate: data['exp'],
quantity: data['qty'],
user: data['user'],
);
}
}
在此代码中,您仅在结果中使用每个节点的 element.value
:
return Items.fromRTDB(Map<String, dynamic>.from(element.value));
如果您还想获得每个项目的密钥,您还必须在其中使用 element.key
并将其传递给您的 Items
对象。
像这样:
Items.fromRTDB(element.key, Map<String, dynamic>.from(element.value));
...
class Items{
final String key;
final String item;
final String expiryDate;
final String quantity;
final String user;
Items({required this.key, required this.item, required this.expiryDate, required this.quantity, required this.user});
//Mapping from real-time database
factory Items.fromRTDB(String key, Map<String, dynamic> data) {
return Items(
key: key,
item: data['item'],
expiryDate: data['exp'],
quantity: data['qty'],
user: data['user'],
);
}
}