You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

437 lines
16 KiB

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<AcceptOrderRequests> createState() => _AcceptOrderRequestsState();
}
class _AcceptOrderRequestsState extends State<AcceptOrderRequests> {
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),
],
),
);
}
}