New to firebase. Need to change order Status based on Order ID which we get after order is placed. Tried getting the document id and based on order ID need to change its status from the dropdown. Please help how to do it properly. Here is the code for dropdown widget and fetchorder function that gets it values from firebase.
DropDown Widget to select from dropdown:
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/src/foundation/key.dart';
import 'package:flutter/src/widgets/framework.dart';
class OrderListScreen extends StatefulWidget {
const OrderListScreen({Key? key}) : super(key: key);
@override
State<OrderListScreen> createState() => _OrderListScreenState();
}
class _OrderListScreenState extends State<OrderListScreen> {
String? newvalue;
@override
Widget build(BuildContext context) {
return Material(
child: Container(
child: Column(
children: <Widget>[
Text(" Please select the order status from the dropdown Below:",
style: TextStyle(backgroundColor: Colors.orange)),
Container(
child: Material(
child: DropdownButton<String>(
value: newvalue,
items: <String>[
'Pending',
'Confirmed',
'Dispatched',
'Received'
].map((String value) {
return DropdownMenuItem<String>(
value: value,
child: Text(value),
);
}).toList(),
onChanged: (String? newvalue) {
value:
newvalue;
var snapshots = FirebaseFirestore.instance
.collection('orders').doc()
// .doc('SDX74EI98KIxPbnS53em')
.update({"orderStatus": newvalue});
setState(() async {
this.newvalue = newvalue;
// await ref.up({ "orderStatus": newvalue });
// await snapshots.forEach((document) async {
// document.ref.updateData(<String, dynamic>{
// name: this.name
// });
// });
});
},
),
)),
],
),
),
);
}
}
FethAllOrders function that get order ID and User ID:
class AdminOrderController extends GetxController {
fetchAllOrders() async {
List<Order> orders = [];
await firestoreInstance
.collection("orders")
.get()
.then((value) => value.docs.forEach((element) {
if (true) {
Timestamp timestamp = element.data()['orderDateTime'];
Order order = Order(
bookCounts: element.data()['bookCounts'],
bookIDsList: element.data()['bookIDsList'],
orderDateTime: timestamp.toDate(),
orderStatus: element.data()['orderStatus'],
totalPrice: element.data()['totalPrice'],
transactionImageLink: element.data()['transactionImageLink'],
userID: element.data()['userID'],
orderID: element.data()['orderID'],
deliveryAddress: element.data()['deliveryAddress'] ??
Address(
name: "name",
phone: "phone",
userID: "userID",
address: "address",
city: "city",
state: "state",
zip:
"zip"), //if there is no address in database temporarly replace it with dummy data to avoid null safety warnings
);
orders.add(order);
}
}));
return orders;
}
}