From aa1d86d17e48ceb88acf77f2192d56a992094d5e Mon Sep 17 00:00:00 2001 From: Sneha Date: Fri, 12 Dec 2025 16:28:41 +0530 Subject: [PATCH] changes --- lib/orders/all_orders.dart | 431 +++++++++++++++++++------------------ 1 file changed, 217 insertions(+), 214 deletions(-) diff --git a/lib/orders/all_orders.dart b/lib/orders/all_orders.dart index 0540a65..bcc5b48 100644 --- a/lib/orders/all_orders.dart +++ b/lib/orders/all_orders.dart @@ -30,7 +30,6 @@ class _AllOrdersState extends State { @override void initState() { - // TODO: implement initState super.initState(); _fetchOrders(); } @@ -59,25 +58,25 @@ class _AllOrdersState extends State { @override Widget build(BuildContext context) { - // ✅ Group orders by date + // Group orders by date final Map> groupedOrders = {}; String formatOrderDate(String? dateStr) { if (dateStr == null || dateStr.trim().isEmpty) { - return ""; // or return a fallback like "N/A" + return ""; } try { - final inputFormat = DateFormat("dd-MMM-yyyy"); // matches 10-Sep-2025 - final outputFormat = DateFormat("dd MMM yyyy"); // output 10 Sep 2025 + final inputFormat = DateFormat("dd-MMM-yyyy"); + final outputFormat = DateFormat("dd MMM yyyy"); final parsedDate = inputFormat.parse(dateStr); return outputFormat.format(parsedDate); } catch (e) { print("Date parse error: $e"); - return dateStr; // fallback to original string + return dateStr; } } for (var order in ordersList) { - final formattedDate = formatOrderDate(order.date); // "10 Sep 2025" + final formattedDate = formatOrderDate(order.date); groupedOrders.putIfAbsent(formattedDate, () => []).add(order); } return Scaffold( @@ -86,10 +85,7 @@ class _AllOrdersState extends State { SearchOrderAppBar( controller: searchController, onBack: () => Navigator.pop(context), - onHelp: () { - // Show help dialog or navigate - print("Help tapped"); - }, + onHelp: () {}, ):null, body: isLoading ? const Center(child: CircularProgressIndicator()) @@ -99,143 +95,140 @@ class _AllOrdersState extends State { style: fontTextStyle(16,Color(0XFF000000),FontWeight.w700), ), ):SingleChildScrollView( - child: - Padding( - padding: EdgeInsets.all(16), - child: Column( - children: [ - SizedBox(height: MediaQuery.of(context).size.height * .042), - /// Total Orders - Column( - children: [ - Text( - "12", - style:fontTextStyle(64, Color(0XFFFF2D2E30), FontWeight.w700), - ), - Text( - "Today's Total Orders", - style: fontTextStyle(24, Color(0XFFFF2D2E30), FontWeight.w600), - ), - SizedBox(height: MediaQuery.of(context).size.height * .042), - /// Bore Water + Drinking Water - Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - OrderCategoryCard( - image: Image.asset( - 'images/bore-water.png', - fit: BoxFit.contain, - height: 40, - width: 40, + child: + Padding( + padding: EdgeInsets.all(16), + child: Column( + children: [ + SizedBox(height: MediaQuery.of(context).size.height * .042), + /// Total Orders + Column( + children: [ + Text( + "12", + style:fontTextStyle(64, Color(0XFFFF2D2E30), FontWeight.w700), + ), + Text( + "Today's Total Orders", + style: fontTextStyle(24, Color(0XFFFF2D2E30), FontWeight.w600), + ), + SizedBox(height: MediaQuery.of(context).size.height * .042), + /// Bore Water + Drinking Water + Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + OrderCategoryCard( + image: Image.asset( + 'images/bore-water.png', + fit: BoxFit.contain, + height: 40, + width: 40, + ), + value: "16", + label: "Bore Water", ), - value: "16", - label: "Bore Water", - ), - OrderCategoryCard( - image: Image.asset( - 'images/drinking-water.png', - height: 40, - width: 40, - fit: BoxFit.contain, + OrderCategoryCard( + image: Image.asset( + 'images/drinking-water.png', + height: 40, + width: 40, + fit: BoxFit.contain, + ), + value: "08", + label: "Drinking Water", ), - value: "08", - label: "Drinking Water", - ), - ], - ), + ], + ), - SizedBox(height: MediaQuery.of(context).size.height * .024), - /// Button - Container( - width: double.infinity, - child: ElevatedButton( - style: ElevatedButton.styleFrom( - backgroundColor:Color(0XFF8270DB), - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(32), + SizedBox(height: MediaQuery.of(context).size.height * .024), + /// Button + Container( + width: double.infinity, + child: ElevatedButton( + style: ElevatedButton.styleFrom( + backgroundColor:Color(0XFF8270DB), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(32), + ), + padding: const EdgeInsets.symmetric( + horizontal: 16, vertical: 16), + ), + onPressed: () { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => OrderRequestsPage()), + ); + }, + child: Text( + "View Order Requests", + style: fontTextStyle(16, Color(0XFFFFFFFFFF), FontWeight.w500), ), - padding: const EdgeInsets.symmetric( - horizontal: 16, vertical: 16), - ), - onPressed: () { - Navigator.push( - context, - MaterialPageRoute( - builder: (context) => OrderRequestsPage()), - ); - }, - child: Text( - "View Order Requests", - style: fontTextStyle(16, Color(0XFFFFFFFFFF), FontWeight.w500), ), - ), - ) - ], - ), - - const SizedBox(height: 20), - - /// Filters Row - SingleChildScrollView( - scrollDirection: Axis.horizontal, - padding: const EdgeInsets.symmetric(horizontal: 12), - child: Row( - children: [ - FilterChipWidget(label: "Building"), - const SizedBox(width: 8), - FilterChipWidget(label: "Status"), - const SizedBox(width: 8), - FilterChipWidget(label: "Date"), - const SizedBox(width: 8), - FilterChipWidget(label: "Amount"), + ) ], ), - ), - const SizedBox(height: 20), + const SizedBox(height: 20), - /// Order Card Example - /// Order List - ListView( - padding: const EdgeInsets.all(12), - shrinkWrap: true, // ✅ Important - physics: NeverScrollableScrollPhysics(), // ✅ Prevent nested scrolling - children: groupedOrders.entries.map((entry) { - final date = entry.key; - final ordersForDate = entry.value; - - return Column( - crossAxisAlignment: CrossAxisAlignment.start, + /// Filters Row + SingleChildScrollView( + scrollDirection: Axis.horizontal, + padding: const EdgeInsets.symmetric(horizontal: 12), + child: Row( children: [ - // Date heading - Padding( - padding: const EdgeInsets.all(0), - child: Text( - date, - style:fontTextStyle(14, Color(0XFF343637), FontWeight.w600), + FilterChipWidget(label: "Building"), + const SizedBox(width: 8), + FilterChipWidget(label: "Status"), + const SizedBox(width: 8), + FilterChipWidget(label: "Date"), + const SizedBox(width: 8), + FilterChipWidget(label: "Amount"), + ], + ), + ), + + const SizedBox(height: 20), + + /// Order List + ListView( + padding: const EdgeInsets.all(12), + shrinkWrap: true, + physics: NeverScrollableScrollPhysics(), + children: groupedOrders.entries.map((entry) { + final date = entry.key; + final ordersForDate = entry.value; + + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.all(0), + child: Text( + date, + style:fontTextStyle(14, Color(0XFF343637), FontWeight.w600), + ), ), - ), - // Orders list for this date - ...ordersForDate.map((order) => OrderCard( - order: order, - onRefresh: _fetchOrders, // 👈 pass parent function here - )), - const SizedBox(height: 12), - ], - ); - }).toList(), - ), + ...ordersForDate.map((order) => OrderCard( + order: order, + onRefresh: _fetchOrders, + )), + const SizedBox(height: 12), + ], + ); + }).toList(), + ), - ], - ), - ) + ], + ), + ) ), ); } } -/// Category Card (Bore Water, Drinking Water) +/// Category Card class OrderCategoryCard extends StatelessWidget { final Image image; final String value; @@ -255,7 +248,7 @@ class OrderCategoryCard extends StatelessWidget { SizedBox( width: 40, height: 40, - child: image, // ✅ Replaced Icon with Image + child: image, ), SizedBox(height: MediaQuery.of(context).size.height * .008), Text( @@ -297,20 +290,26 @@ class OrderCard extends StatelessWidget { Color _getStatusColor() { String st=''; + if(order.status.toLowerCase()=='advance_paid'){ st='pending'; } + else if(order.status.toLowerCase()=='accepted'){ // ⭐ ADDED + st='pending'; + } else if(order.status.toLowerCase()=='deliveryboy_assigned'){ st='assigned'; } else if(order.status.toLowerCase()=='tanker_assigned'){ st='assigned'; } + else if(order.status.toLowerCase()=='delivered'){ + st='completed'; + } else{ st=order.status.toLowerCase(); } - switch (st.toLowerCase()) { case "completed": return Color(0XFFC4E8C3); @@ -329,12 +328,19 @@ class OrderCard extends StatelessWidget { Color _getTextStatusColor() { String st=''; + if(order.status.toLowerCase()=='advance_paid'){ st='pending'; } + else if(order.status.toLowerCase()=='accepted'){ // ⭐ ADDED + st='pending'; + } else if(order.status.toLowerCase()=='deliveryboy_assigned'){ st='assigned'; } + else if(order.status.toLowerCase()=='delivered'){ + st='completed'; + } else if(order.status.toLowerCase()=='tanker_assigned'){ st='assigned'; } @@ -365,6 +371,10 @@ class OrderCard extends StatelessWidget { String st = (order.status == 'advance_paid') ? 'pending' + : (order.status.toLowerCase() == 'accepted') // ⭐ ADDED + ? 'pending' + : (order.status.toLowerCase() == 'delivered') // ⭐ ADDED + ? 'completed' : (order.status.toString().toLowerCase() == 'deliveryboy_assigned') ? 'assigned' : (order.status.toString().toLowerCase() == 'tanker_assigned') @@ -387,23 +397,21 @@ class OrderCard extends StatelessWidget { ], ), - /// 👇 IntrinsicHeight allows both sides of the row to match height dynamically child: IntrinsicHeight( child: Row( - crossAxisAlignment: CrossAxisAlignment.stretch, // 👈 image stretches + crossAxisAlignment: CrossAxisAlignment.stretch, children: [ - /// 🖼 Left Image ClipRRect( borderRadius: const BorderRadius.only( topLeft: Radius.circular(12), bottomLeft: Radius.circular(12), ), child: SizedBox( - width: 145, // fixed width + width: 145, child: order.imageAsset.isNotEmpty ? Image.asset( order.imageAsset, - fit: BoxFit.cover, // 👈 fills height + fit: BoxFit.cover, ) : Image.network( order.imageAsset, @@ -412,14 +420,12 @@ class OrderCard extends StatelessWidget { ), ), - /// 📄 Right Content Expanded( child: Padding( padding: const EdgeInsets.all(10.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - // Status chip Container( padding: const EdgeInsets.symmetric( horizontal: 8, @@ -456,11 +462,9 @@ class OrderCard extends StatelessWidget { ), const SizedBox(height: 12), - /// =================== - /// 🟡 ASSIGN & CANCEL BUTTONS - /// =================== Visibility( - visible: order.status.toLowerCase() == 'advance_paid', + visible: order.status.toLowerCase() == 'advance_paid' + || order.status.toLowerCase() == 'accepted', // ⭐ ADDED child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ @@ -527,9 +531,6 @@ class OrderCard extends StatelessWidget { ), ), - /// =================== - /// 🟣 TRACK DELIVERY BUTTON - /// =================== Visibility( visible: order.status.toLowerCase() == 'in_progress', child: GestureDetector( @@ -565,79 +566,80 @@ class OrderCard extends StatelessWidget { ), Visibility( - visible: st.toLowerCase() == 'assigned', - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Image.asset( - 'images/avatar.png', - fit: BoxFit.cover, - width: 12, - height: 12, - ), - const SizedBox(width: 8), - - // Title + Chips - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - children: [ - Expanded( - child: Text( - order.delivery_agent_name!=''?"Assigned to ${order.delivery_agent_name}":"Assigned to ${order.tanker_name}", - maxLines: 1, - overflow: TextOverflow.ellipsis, - style: fontTextStyle( - 8, const Color(0xFF646566), FontWeight.w400), + visible: st.toLowerCase() == 'assigned', + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Image.asset( + 'images/avatar.png', + fit: BoxFit.cover, + width: 12, + height: 12, + ), + const SizedBox(width: 8), + + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Expanded( + child: Text( + order.delivery_agent_name!=''? + "Assigned to ${order.delivery_agent_name}" + :"Assigned to ${order.tanker_name}", + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: fontTextStyle( + 8, const Color(0xFF646566), FontWeight.w400), + ), ), - ), - ], - ), + ], + ), - ], + ], + ), ), - ), - ], - ), - SizedBox(height: MediaQuery.of(context).size.height * .004), - GestureDetector( - onTap: () async { - final result = await Navigator.push( - context, - MaterialPageRoute( - builder: (context) => ChangeDriverScreen(order: order), + ], + ), + SizedBox(height: MediaQuery.of(context).size.height * .004), + GestureDetector( + onTap: () async { + final result = await Navigator.push( + context, + MaterialPageRoute( + builder: (context) => ChangeDriverScreen(order: order), + ), + ); + if (result == true) { + onRefresh?.call(); + } + }, + child: Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(22), + color: const Color(0XFF8270DB), + border: Border.all(color: const Color(0XFF8270DB)), ), - ); - if (result == true) { - onRefresh?.call(); - } - }, - child: Container( - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(22), - color: const Color(0XFF8270DB), - border: Border.all(color: const Color(0XFF8270DB)), - ), - child: const Padding( - padding: EdgeInsets.fromLTRB(8, 4, 8, 4), - child: Text( - "Change", - style: TextStyle( - fontSize: 14, - color: Colors.white, - fontWeight: FontWeight.w400), + child: const Padding( + padding: EdgeInsets.fromLTRB(8, 4, 8, 4), + child: Text( + "Change", + style: TextStyle( + fontSize: 14, + color: Colors.white, + fontWeight: FontWeight.w400), + ), ), ), ), - ), - ], - ) + ], + ) ), @@ -657,7 +659,6 @@ class OrderCard extends StatelessWidget { ), const SizedBox(width: 8), - // Title + Chips Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -666,7 +667,9 @@ class OrderCard extends StatelessWidget { children: [ Expanded( child: Text( - order.delivery_agent_name!=''?"Delivered by ${order.delivery_agent_name}":"Assigned to ${order.tanker_name}", + order.delivery_agent_name!=''? + "Delivered by ${order.delivery_agent_name}" + :"Assigned to ${order.tanker_name}", maxLines: 1, overflow: TextOverflow.ellipsis, style: fontTextStyle( @@ -697,4 +700,4 @@ class OrderCard extends StatelessWidget { ), ); } -} \ No newline at end of file +}