import 'package:flutter/material.dart'; import 'package:supplier_new/common/settings.dart'; import 'package:supplier_new/orders/edit_order_requests.dart'; class AcceptOrderRequests extends StatefulWidget { var order; var status; AcceptOrderRequests({this.order, this.status}); @override State createState() => _AcceptOrderRequestsState(); } class _AcceptOrderRequestsState extends State { int advancePayable = 0; int advance =0; double amountToPayAfterDelivery = 0.0; double totalFare = 0.0; @override void initState() { // TODO: implement initState super.initState(); advance = 150; advancePayable = advance; totalFare = advance + double.parse(widget.order.quoted_amount); amountToPayAfterDelivery = totalFare - advancePayable; } @override Widget build(BuildContext context) { return Scaffold( backgroundColor: Colors.white, extendBodyBehindAppBar: true, appBar: AppBar( backgroundColor: Colors.transparent, elevation: 0, scrolledUnderElevation: 0, title: Text( '', style: fontTextStyle(16, Color(0XFF2A2A2A), FontWeight.w600), ), iconTheme: IconThemeData(color: Color(0XFF2A2A2A)), actions: [ Row( children: [ Padding( padding: EdgeInsets.fromLTRB(0, 10, 10, 10), child: IconButton( icon: Image.asset( 'images/help_appbar.png', height: 20, width: 20, color: Color(0XFFFFFFFF), ), onPressed: () {}, ), ) ], ) ], leading: GestureDetector( onTap: () { Navigator.pop(context); }, child: Padding( padding: const EdgeInsets.fromLTRB(8, 8, 8, 8), // Add padding if needed child: Image.asset( 'images/backbutton_appbar.png', // Replace with your image path fit: BoxFit.contain, color: Color(0XFFFFFFFF), height: 24, width: 24, ), ), ), ), body: SingleChildScrollView( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ /// 🔹 Top Card with Image Stack( clipBehavior: Clip.none, children: [ /// 🔹 Background Image ClipRRect( borderRadius: const BorderRadius.only( bottomLeft: Radius.circular(0), bottomRight: Radius.circular(0), ), child: Image.asset( "images/building.png", height: 220, width: double.infinity, fit: BoxFit.cover, ), ), /// 🔹 Floating Info Card (half on image, half below) Positioned( bottom: -40, // pulls the card out by 40px left: 12, right: 12, child: Container( padding: const EdgeInsets.all(12), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(12), boxShadow: [ BoxShadow( color: Colors.black12, blurRadius: 6, offset: Offset(0, 3), ), ], ), child: Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( padding: const EdgeInsets.symmetric( horizontal: 8, vertical: 4), decoration: BoxDecoration( color: Color(0XFFFFFFFF), borderRadius: BorderRadius.circular(4), border: Border.all( color: widget.status.statusColor, width: 0.5, ), ), child: Text(widget.status.status, style: fontTextStyle( 12, widget.status.statusColor, FontWeight.w500)), ), Text( widget.order.building_name, style: fontTextStyle( 20, const Color(0XFF2D2E30), FontWeight.w600), ), SizedBox(height: 4), Text( widget.order.displayAddress, style: fontTextStyle( 12, const Color(0XFF939495), FontWeight.w400), ), ], ), const Spacer(), Text( widget.order.distanceInKm.toString() + 'Km', style: fontTextStyle( 12, const Color(0XFF939495), FontWeight.w400), ), ], ), ), ), ], ), SizedBox( height: MediaQuery.of(context).size.height * .08, ), /// 🔹 Order Details Padding( padding: EdgeInsets.fromLTRB(16, 0, 16, 0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( "ORDER DETAILS", style: fontTextStyle( 10, const Color(0XFF2D2E30), FontWeight.w600), ), SizedBox( height: MediaQuery.of(context).size.height * .011, ), _detailTwoRow( "Tanker Price", "₹${AppSettings.formDouble(widget.order.quoted_amount) ?? ''}", "images/financialsBottomIcon.png", "", "", ""), SizedBox( height: MediaQuery.of(context).size.height * .02, ), _detailTwoRow( "Water Type", "${widget.order.type_of_water}", "images/water.png", "Date of Delivery", "${widget.order.time}", "images/calendar_appbar.png", ), SizedBox( height: MediaQuery.of(context).size.height * .02, ), _detailTwoRow( "Capacity", "${widget.order.capacity}", "images/capacity.png", "Time of Delivery", "${widget.order.averageTime}", "images/time.png", ), SizedBox( height: MediaQuery.of(context).size.height * .02, ), _detailTwoRow( "Quantity", "${widget.order.quantity}", "images/quantity.png", "Booking Charges", advance.toString(), "images/advance.png", ), ], ), ), SizedBox( height: MediaQuery.of(context).size.height * .008, ), /// 🔹 Additional Details Padding( padding: EdgeInsets.fromLTRB(16, 0, 16, 16), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( "ADDITIONAL DETAILS", style: fontTextStyle( 10, const Color(0XFF2D2E30), FontWeight.w600), ), SizedBox( height: MediaQuery.of(context).size.height * .011, ), Text( "Lorem ipsum dolor sit amet, consectetur adipiscing elit, " "sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. " "Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut " "aliquip ex ea commodo consequat.", style: fontTextStyle( 12, const Color(0XFF646566), FontWeight.w400), ), ], )), /// 🔹 Payment Summary Padding( padding: EdgeInsets.fromLTRB(16, 0, 16, 16), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( "PAYMENT SUMMARY", style: fontTextStyle( 10, const Color(0XFF2D2E30), FontWeight.w600), ), SizedBox( height: MediaQuery.of(context).size.height * .011, ), _detailRow("Tanker Price", "₹${AppSettings.formDouble(widget.order.quoted_amount) ?? ''}"), SizedBox( height: MediaQuery.of(context).size.height * .004, ), _detailRow("Booking Charges", "₹ " + advance.toString()), SizedBox( height: MediaQuery.of(context).size.height * .004, ), _detailRow("Total Amount", "₹ " + totalFare.toString()), SizedBox( height: MediaQuery.of(context).size.height * .004, ), Divider( color: Color(0XFF646566), thickness: 0.3, ), SizedBox( height: MediaQuery.of(context).size.height * .004, ), _detailRow("Booking Charges Payable", '₹${AppSettings.formDouble(advancePayable.toString()) ?? ''}'), SizedBox( height: MediaQuery.of(context).size.height * .004, ), _detailRow("Amount to Pay (After Delivery)", '₹${AppSettings.formDouble(amountToPayAfterDelivery.toString()) ?? ''}'), ], ), ), const SizedBox(height: 80), // space for bottom buttons ], ), ), /// 🔹 Bottom Action Buttons bottomNavigationBar: Container( padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8), decoration: BoxDecoration( color: Color(0XFFFFFFFF), border: Border(top: BorderSide(color: Color(0XFFF5F6F6))), ), child: Row( children: [ Expanded( child: OutlinedButton( style: OutlinedButton.styleFrom( foregroundColor: Color(0XFF000000), backgroundColor: Color(0xFFF1F1F1), side: BorderSide(color: Color(0xFFF1F1F1)), padding: EdgeInsets.symmetric(vertical: 10), // uniform height ), onPressed: () { Navigator.push( context, MaterialPageRoute( builder: (_) => EditOrderRequests( order: widget.order, advance: advance.toString(), status: widget.status, ), ), ); }, child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Image.asset('images/edit.png', height: 20, width: 20), SizedBox(width: 4), Text( "Edit Order", style: fontTextStyle( 14, const Color(0XFF000000), FontWeight.w400), ), ], ), ), ), SizedBox(width: 8), Expanded( child: OutlinedButton( style: OutlinedButton.styleFrom( foregroundColor: Color(0XFFE2483D), backgroundColor: Colors.white, side: BorderSide(color: Color(0XFFE2483D)), padding: EdgeInsets.symmetric(vertical: 10), ), onPressed: ()async { AppSettings.preLoaderDialog(context); bool isOnline = await AppSettings.internetConnectivity(); if (isOnline) { var payload = new Map(); payload["supplierId"] = AppSettings.supplierId; payload["amount"] = int.parse(widget.order.quoted_amount); payload["delivery_charges"] = advance; payload["action"] = 'rejected'; bool status = await AppSettings.acceptOrderRequests( payload, widget.order.dbId); try { if (status) { Navigator.of(context,rootNavigator: true).pop(); AppSettings.longSuccessToast("Order request rejected Successfully"); Navigator.pop(context, true); } else{ Navigator.of(context,rootNavigator: true).pop(); AppSettings.longFailedToast("reject of order request Failed"); } } catch (e) { Navigator.of(context,rootNavigator: true).pop(); print(e); } } else{ Navigator.of(context,rootNavigator: true).pop(); AppSettings.longFailedToast("Please Check internet"); } }, child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Image.asset('images/cross.png', height: 20, width: 20), SizedBox(width: 4), Text( "Reject", style: fontTextStyle( 14, const Color(0XFF000000), FontWeight.w400), ), ], ), ), ), SizedBox(width: 8), Expanded( child: ElevatedButton( style: ElevatedButton.styleFrom( backgroundColor: Color(0XFF0A9E04), foregroundColor: Color(0XFFFFFFFF), padding: EdgeInsets.symmetric(vertical: 10), ), onPressed: () async { AppSettings.preLoaderDialog(context); bool isOnline = await AppSettings.internetConnectivity(); if (isOnline) { var payload = new Map(); payload["supplierId"] = AppSettings.supplierId; payload["amount"] = int.parse(widget.order.quoted_amount); payload["delivery_charges"] = advance; payload["action"] = 'accepted'; bool status = await AppSettings.acceptOrderRequests( payload, widget.order.dbId); try { if (status) { Navigator.of(context,rootNavigator: true).pop(); Navigator.pop(context, true); } else{ Navigator.of(context,rootNavigator: true).pop(); AppSettings.longFailedToast("Accept of order request Failed"); } } catch (e) { Navigator.of(context,rootNavigator: true).pop(); print(e); } } else{ Navigator.of(context,rootNavigator: true).pop(); AppSettings.longFailedToast("Please Check internet"); } }, child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Image.asset('images/rite.png', height: 20, width: 20), SizedBox(width: 4), Text( "Accept", style: fontTextStyle( 14, const Color(0XFFFFFFFF), FontWeight.w400), ), ], ), ), ), ], )), ); } /// 🔹 Helper widget for rows Widget _detailRow(String title, String value) { return Padding( padding: const EdgeInsets.symmetric(vertical: 0), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( title, style: fontTextStyle(12, const Color(0XFF646566), FontWeight.w400), ), Text( value, style: fontTextStyle(12, const Color(0XFF2D2E30), FontWeight.w500), ), ], ), ); } Widget _detailTwoRow( String title1, String value1, String path1, String title2, String value2, String path2, { EdgeInsetsGeometry padding = const EdgeInsets.symmetric(vertical: 6), }) { final titleStyle = fontTextStyle(12, Color(0XFF646566), FontWeight.w400); final valueStyle = fontTextStyle(12, Color(0XFF343637), FontWeight.w500); Widget _col(String t, String v, String path) { return Expanded( child: Padding( padding: const EdgeInsets.only(right: 8.0), child: Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ if (path.isNotEmpty) Image.asset( path, fit: BoxFit.contain, height: 20, width: 20, color: const Color(0XFFC3C4C4), ), if (path.isNotEmpty) const SizedBox(width: 6), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text(t, style: titleStyle, maxLines: 1, overflow: TextOverflow.ellipsis), Text(v, style: valueStyle, maxLines: 1, overflow: TextOverflow.ellipsis), ], ), ) ], ), ), ); } return Padding( padding: padding, child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ _col(title1, value1, path1), _col(title2, value2, path2), ], ), ); } }