#firebase #flutter #dart #google-cloud-firestore
# #firebase #flutter #dart #google-облако-firestore
Вопрос:
Мое приложение электронной коммерции flutter подключено к серверной части облачного Firestore. У меня есть cart
коллекция, в которой есть несколько документов с заголовком, products
который добавляет пользователь. У каждого продукта есть поле order_status
, которое может in_cart
checked_out
иметь значение или. Теперь я хочу отобразить их на экране моей корзины и проверить экран на основе значения order_status
. Я использую ListView. Builder
approach, но, поскольку есть itemCount
, я не могу отображать определенные документы из той же коллекции. Как правильно это сделать? Должен ли я хранить продукты в двух коллекциях?
Код:
ListView.builder(
scrollDirection: Axis.vertical,
shrinkWrap: true,
itemCount: snapshot.data.length,
itemBuilder: (_, index) {
if (snapshot.data[index]['order_status'] == 'in_cart') {
_total = _total snapshot.data[index]['total'];
return Container(
padding: EdgeInsets.only(bottom: 12.5),
child: Column(
children: [
Container(
height: (MediaQuery.of(context).size.height) / 7,
width: MediaQuery.of(context).size.width,
child: Container(
height: 105,
width: 85,
child: DecoratedBox(
decoration: BoxDecoration(
color: Colors.black12,
),
child: Container(
padding: EdgeInsets.all(10.0),
child: Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
crossAxisAlignment:
CrossAxisAlignment.center,
children: [
SizedBox(
width: 12.0,
),
IconButton(
icon: Image.network(
),
iconSize: 75.0,
onPressed: () {},
),
SizedBox(
width: 30.0,
),
Column(
children: [
Text(
snapshot.data[index]['title'],
style: kHeading1.copyWith(
fontSize: 22.5),
),
SizedBox(
height: 5.0,
),
Text(
'Rs.'
snapshot.data[index]['price']
.toString()
'/'
snapshot.data[index]
['product_unit'],
style: kTitle1,
),
SizedBox(
height: 5.0,
),
Text(
'Total Rs.'
snapshot.data[index]['total']
.toString(),
style: kTitle1,
),
],
),
SizedBox(
width: 20.0,
),
Row(
children: [
IconButton(
icon: Icon(
Icons.keyboard_arrow_up,
color: Colors.black,
),
onPressed: () {
increaseCart(
snapshot.data[index]
['title'],
snapshot.data[index]
['unit'],
snapshot.data[index]
['price']);
}),
Text(
snapshot.data[index]['unit']
.toString(),
style: kHeading2,
),
IconButton(
icon: Icon(
Icons.keyboard_arrow_down,
color: Colors.black),
onPressed: () {
decreaseCart(
snapshot.data[index]
['title'],
snapshot.data[index]
['unit'],
snapshot.data[index]
['price']);
}),
],
),
],
),
),
),
),
),
],
),
);
} else {
return null;
}
}),
Комментарии:
1. Можете ли вы подробно описать, что вы подразумеваете под «Я использую подход ListView.Builder, но поскольку есть количество элементов, я не могу отображать определенные документы из той же коллекции».? Я не понимаю конкретной проблемы, с которой вы столкнулись.
2. Я работал почти над точно таким же сценарием. Нашли ли вы подходящее решение?
3. На случай, если кому-то это нужно, у меня есть решение. Это старый пост, поэтому я предполагаю, что путь вперед был найден