привет, просто пытаюсь создать приложения для отображения списка добавляемых элементов, я застрял, когда пытался проверить условие, которое, если у определенного c пользователя уже есть элементы, тогда карта не будет отображать список элементов в там. В меню отображается только элемент, которого нет у пользователя
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
import 'package:galon_app/PlugIn/Item.dart';
import 'package:galon_app/pages/home.dart';
import 'package:galon_app/widget/priceCard.dart';
import 'package:galon_app/widget/progress.dart';
class ItemUser extends StatefulWidget {
final String userId;
ItemUser({
this.userId
});
@override
_ItemUserState createState() => _ItemUserState();
}
class _ItemUserState extends State<ItemUser> {
Future<QuerySnapshot> itemList;
List<Item> item = [];
List<ItemCard> cardview = [];
// getItemList() async{
// Future<QuerySnapshot> items = itemnRef.getDocuments();
// setState(() {
// itemList = items;
// });
// }
getItemList() async{
QuerySnapshot snapshot = await itemnRef.getDocuments();
setState(() {
item = snapshot.documents.map((e) => Item.fromDocument(e)).toList();
});
for(final doc in item){
final snap = await priceRef.document(widget.userId).collection('price').document(doc.id).get();
print(snap.exists);
if(!snap.exists){
print('adding');
cardview = snapshot.documents.map((doc) => ItemCard.fromDocument(doc, widget.userId)).toList();
}
}
print(cardview.length);
}
@override
void initState() {
super.initState();
getItemList();
}
buildItemList(){
if(!cardview.isEmpty){
return Container(
height: 700,
child: ListView(
children: cardview,
),
);
}else{
return Text('');
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Add Item')),
body: buildItemList(),
);
}
}
class ItemCard extends StatelessWidget {
final String id;
final String itemname;
final String itemtype;
final String imageurl;
final String userId;
ItemCard({
this.id,
this.itemname,
this.itemtype,
this.imageurl,
this.userId
});
factory ItemCard.fromDocument(DocumentSnapshot doc, String userId){
return ItemCard(
id: doc['id'],
itemname: doc['itemname'],
itemtype: doc['type'],
imageurl: doc['imageurl'],
userId: userId,
);
}
addItem() async{
print('add items');
DocumentSnapshot doc = await priceRef.document(userId).collection('price').document(id).get();
if(!doc.exists){
priceRef.document(userId).collection('price').document(id).setData({
'userid' : userId,
'itemid' : id,
'itemname' : itemname,
'itemtype' : itemtype,
'imageurl' : imageurl,
'price' : 0
});
}
}
@override
Widget build(BuildContext context) {
return Container(
height: 150,
child: Card(
child: Container(
height: 200,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: <Widget>[
Container(
height: 100,
width: 100,
child: AspectRatio(
aspectRatio: 16/9,
child: Container(
decoration: BoxDecoration(
border: Border.all(
color: Colors.grey[600],
width: 5
),
image: DecorationImage(
fit: BoxFit.fill,
image: NetworkImage(imageurl)
)
),
),
),
),
SizedBox(width: 10),
Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(itemname,style: TextStyle(color: Colors.grey[600],fontSize: 20),),
Text(itemtype,style: TextStyle(color: Colors.grey[500],fontSize: 15),)
],),
Container(
padding: EdgeInsets.only(left:270),
child: Container(
height: 200,
color: Colors.green[50],
child: RaisedButton(
onPressed: addItem,
child: Icon(Icons.check,color: Colors.green[50],)
),
),
)
],
),
)
),
);
}
}
Я создал одну демонстрацию для извлечения всего значения из снимка в коде флаттера. Но я не понял, в чем проблема с моим кодом. Если кто-нибудь может предложить решение или глубоко погрузиться в это, то это будет действительно хорошо для меня.
Я прикрепил одно изображение, с которым у меня возникла проблема.