status
This commit is contained in:
@@ -16,6 +16,12 @@ class _OrderDetailScreenState extends State<OrderDetailScreen> {
|
||||
Map order = {};
|
||||
final Map<String, bool> _expanded = {};
|
||||
|
||||
bool confirming = false;
|
||||
|
||||
bool get isOrderPlaced => order['status'] == 'order_placed';
|
||||
bool get isConfirmed => order['status'] != 'order_placed';
|
||||
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
@@ -65,6 +71,10 @@ class _OrderDetailScreenState extends State<OrderDetailScreen> {
|
||||
_itemsSection(items, scale),
|
||||
SizedBox(height: 18 * scale),
|
||||
_totalsSection(scale),
|
||||
|
||||
SizedBox(height: 24 * scale),
|
||||
_confirmOrderButton(scale),
|
||||
|
||||
],
|
||||
),
|
||||
),
|
||||
@@ -72,6 +82,69 @@ class _OrderDetailScreenState extends State<OrderDetailScreen> {
|
||||
);
|
||||
}
|
||||
|
||||
Widget _confirmOrderButton(double scale) {
|
||||
final isPlaced = order['status'] == 'order_placed';
|
||||
|
||||
return SizedBox(
|
||||
width: double.infinity,
|
||||
height: 52 * scale,
|
||||
child: ElevatedButton(
|
||||
style: ElevatedButton.styleFrom(
|
||||
backgroundColor: isPlaced ? Colors.orange : Colors.green,
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(14 * scale),
|
||||
),
|
||||
),
|
||||
onPressed: (!isPlaced || confirming)
|
||||
? null
|
||||
: () async {
|
||||
setState(() => confirming = true);
|
||||
|
||||
final service =
|
||||
OrderService(DioClient.getInstance(context));
|
||||
|
||||
final res =
|
||||
await service.confirmOrder(order['order_id']);
|
||||
|
||||
confirming = false;
|
||||
|
||||
if (res['success'] == true) {
|
||||
setState(() {
|
||||
order['status'] = 'order_confirmed';
|
||||
});
|
||||
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
const SnackBar(
|
||||
content: Text('Order confirmed successfully'),
|
||||
backgroundColor: Colors.green,
|
||||
),
|
||||
);
|
||||
} else {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text(res['message'] ?? 'Failed to confirm order'),
|
||||
backgroundColor: Colors.red,
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
setState(() {});
|
||||
},
|
||||
child: confirming
|
||||
? const CircularProgressIndicator(color: Colors.white)
|
||||
: Text(
|
||||
isPlaced ? 'Confirm Order' : 'Order Confirmed',
|
||||
style: TextStyle(
|
||||
fontSize: 16 * scale,
|
||||
fontWeight: FontWeight.bold,
|
||||
color: Colors.white,
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
// -----------------------------
|
||||
// SUMMARY CARD
|
||||
// -----------------------------
|
||||
@@ -267,7 +340,7 @@ class _OrderDetailScreenState extends State<OrderDetailScreen> {
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text("Totals",
|
||||
Text("Totalss",
|
||||
style: TextStyle(fontSize: 18 * scale, fontWeight: FontWeight.bold)),
|
||||
SizedBox(height: 12 * scale),
|
||||
_totalRow("Total Qty", order['ttl_qty'], scale),
|
||||
|
||||
Reference in New Issue
Block a user