我目前正在使用“餐厅配送”应用,正在使用Cloud Fire Store存储当前订单。我有一个名为订单的子集合,并且文件是自动生成的,并且我有多个字段,例如名称,电子邮件,地址和状态。订购时的状态为“等待中”。订购后,当我将其连接到流时,该订单将显示在管理屏幕中。如果管理员接受订单,我想将订单状态更新为“已接受”,但要这样做,我需要文档ID,但这是自动生成的。是否有任何方法可以检索此自动生成的ID。如果是,请帮助我。如果没有人建议我,可以使用一种方法来检索适当订单的适当文档ID。
谢谢!
class CurrentOrderStream extends StatelessWidget {
@override
Widget build(BuildContext context) {
DateTime now = new DateTime.now();
String date = "${now.day}-${now.month}-${now.year}";
return StreamBuilder<QuerySnapshot>(
stream: firestore
.collection('orders')
.doc(date)
.collection('orders')
.where('status', isEqualTo: 'waiting')
.snapshots(),
builder: (context, AsyncSnapshot<QuerySnapshot> snapshot) {
if (!snapshot.hasData) {
return Center(
child: CircularProgressIndicator(
backgroundColor: Colors.lightBlueAccent,
),
);
}
List<CurrentOrderCard> currentOrderCardWidget = [];
final messages = snapshot.data.docs;
for (var i in messages) {
print(i['name']);
print(i['email']);
print(i['order']);
print(i['mobileNumber']);
print(i['count']);
print(i['type']);
print(i['total']);
print(i['deliveryAddress']);
print(i['url']);
String _order = i['order'].toString().replaceAll('[', '');
String _count = i['count'].toString().replaceAll('[', '');
String _type = i['type'].toString().replaceAll('[', '');
String _url = i['url'].toString().replaceAll('[', '');
_url = _url.toString().replaceAll(']', '');
_count = _count.toString().replaceAll(']', '');
_type = _type.toString().replaceAll(']', '');
_order = _order.toString().replaceAll(']', '');
print(_count);
print(_order);
print(_type);
print(_url);
currentOrderCardWidget.add(CurrentOrderCard(
name: i['name'],
address: i['deliveryAddress'],
email: i['email'],
order: _order,
mobileNumber: i['mobileNumber'],
));
}
return ListView(
children: currentOrderCardWidget,
);
},
);
}
}
class CurrentOrderCard extends StatelessWidget {
final name;
final mobileNumber;
final address;
final order;
final email;
final count;
final type;
final total;
final url;
CurrentOrderCard(
{this.name,
this.order,
this.mobileNumber,
this.address,
this.email,
this.count,
this.total,
this.type,
this.url});
@override
Widget build(BuildContext context) {
return Material(
elevation: 20,
color: Colors.transparent,
child: Container(
padding: EdgeInsets.all(15),
margin: EdgeInsets.symmetric(vertical: 10, horizontal: 10),
width: MediaQuery.of(context).size.width,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10), color: containerColor),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text('Order',
style: GoogleFonts.montserrat(
fontSize: 18, fontWeight: FontWeight.bold)),
SizedBox(
height: 5,
),
Text(order, style: GoogleFonts.montserrat(fontSize: 12)),
SizedBox(
height: 10,
),
Text('Delivery Address',
style: GoogleFonts.montserrat(
fontSize: 18, fontWeight: FontWeight.bold)),
SizedBox(
height: 5,
),
Text(address, style: GoogleFonts.montserrat(fontSize: 12)),
SizedBox(
height: 15,
),
Divider(
thickness: 2,
),
SizedBox(
height: 5,
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
ElevatedButton(
style: ButtonStyle(
backgroundColor: MaterialStateProperty.resolveWith(
(states) => Colors.red),
),
onPressed: () {},
child: Row(
children: [
Text('DECLINE'),
SizedBox(
width: 5,
),
Icon(
Icons.cancel,
size: 20,
)
],
),
),
ElevatedButton(
style: ButtonStyle(
backgroundColor: MaterialStateProperty.resolveWith(
(states) => Colors.green),
),
onPressed: () {},
child: Row(
children: [
Text('ACCEPT'),
SizedBox(
width: 5,
),
Icon(
Icons.check,
size: 20,
)
],
),
),
],
)
],
),
),
);
}
}