我正在从firestore获取数据并转换为一个模型,然后添加到该特定模型的项目列表中。我注意到有些不对劲,然后我试图检查该列表中项目的值,我发现它们都是该模型类的示例。附上终端的屏幕截图。
这是从Firestore检索数据的代码。
List<ItemModel> allProducts = [];
Future<List<ItemModel>> getAllProducts() async {
final QuerySnapshot snapshot =
await FirebaseFirestore.instance.collection('Products').get();
List<ItemModel> _allProducts = [];
for (var doc in snapshot.docs) {
print(doc['title']);
_allProducts.add(ItemModel(
description: doc['description'],
id: doc['id'],
imagepath: doc['imagepath'],
price: doc['price'],
title: doc['title'],
amount: doc['amount']));
}
return _allProducts;
}
Future newList() async {
print(allProducts);
allProducts = await getAllProducts();
print(allProducts);
}
@override
void initState() {
newList();
super.initState();
}
这是将文档快照从firebase转换为Item Model类的数据。
class ItemModel with ChangeNotifier {
final String title;
final int price;
bool isCarted;
final String id; // name of produce
int amount; // amount uploader
String description; // description of produce
String imagepath; // image of produce
bool isfavourited; // favorited produce
ItemModel({
required this.id,
this.isCarted = false,
required this.price,
required this.title,
this.amount = 1,
required this.description,
required this.imagepath,
this.isfavourited = false,
});
factory ItemModel.fromMap(Map map) {
return ItemModel(
id: map['id'],
isCarted: map['isCarted'],
isfavourited: map['isfavourited'],
amount: map['amount'],
price: map['price'],
title: map['title'],
description: map['description'],
imagepath: map['imagepath'],
);
}
factory ItemModel.fromFirestore(
DocumentSnapshot<Map<String, dynamic>> snapshot) {
final data = snapshot.data();
return ItemModel(
id: data!['id'],
isCarted: data['isCarted'] as bool,
isfavourited: data['isFavourited'] as bool,
amount: data['amount'] as int,
price: data['price'] as int,
title: data['title'],
description: data['description'],
imagepath: data['imagepath'],
);
}
上图显示了控制台上的print语句。打印这些快照值本身会显示有效文本,如图所示。
1条答案
按热度按时间rsaldnfx1#
当您尝试在控制台中打印
List
的项目对象时,它将始终返回您在控制台中接收到的输出。要打印单个值,您可以执行以下操作:或者,您可以在类中定义一个
toString()
方法覆盖,它始终显示对象的String输出。