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 { double advancePayable=0.0; double advance=0.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: () {}, 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: () { }, 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), ], ), ); } }