import 'package:flutter/material.dart'; import '../services/dio_client.dart'; import '../services/order_service.dart'; class OrderDetailScreen extends StatefulWidget { final String orderId; const OrderDetailScreen({super.key, required this.orderId}); @override State createState() => _OrderDetailScreenState(); } class _OrderDetailScreenState extends State { bool loading = true; Map order = {}; @override void initState() { super.initState(); load(); } Future load() async { final service = OrderService(DioClient.getInstance(context)); final res = await service.getOrderDetails(widget.orderId); if (res['success'] == true) { order = res['order']; } loading = false; setState(() {}); } Widget _row(String label, dynamic value) { return Padding( padding: const EdgeInsets.symmetric(vertical: 4), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text(label, style: const TextStyle(fontSize: 14, color: Colors.grey)), Text(value?.toString() ?? 'N/A', style: const TextStyle( fontSize: 15, fontWeight: FontWeight.w600)), ], ), ); } @override Widget build(BuildContext context) { final items = order['items'] ?? []; return Scaffold( appBar: AppBar(title: const Text("Order Details")), body: loading ? const Center(child: CircularProgressIndicator()) : Padding( padding: const EdgeInsets.all(16), child: ListView( children: [ // ---------------- ORDER SUMMARY ---------------- const Text( "Order Summary", style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold), ), const SizedBox(height: 10), _row("Order ID", order['order_id']), _row("Mark No", order['mark_no']), _row("Origin", order['origin']), _row("Destination", order['destination']), _row("Status", order['status']), const Divider(height: 30), const Text( "Totals", style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold), ), const SizedBox(height: 10), _row("CTN", order['ctn']), _row("Qty", order['qty']), _row("Total Qty", order['ttl_qty']), _row("Amount", "₹${order['ttl_amount'] ?? 0}"), _row("CBM", order['cbm']), _row("Total CBM", order['ttl_cbm']), _row("KG", order['kg']), _row("Total KG", order['ttl_kg']), const Divider(height: 30), // ---------------- ORDER ITEMS ---------------- const Text( "Order Items", style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold), ), const SizedBox(height: 10), ...List.generate(items.length, (i) { final item = items[i]; return Card( margin: const EdgeInsets.only(bottom: 12), child: Padding( padding: const EdgeInsets.all(12), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( item['description'] ?? "No description", style: const TextStyle( fontSize: 16, fontWeight: FontWeight.w600), ), const SizedBox(height: 6), _row("Qty", item['qty']), _row("Unit", item['unit']), _row("CBM", item['cbm']), _row("KG", item['kg']), _row("Amount", "₹${item['ttl_amount'] ?? 0}"), _row("Shop No", item['shop_no']), ], ), ), ); }), ], ), ), ); } }