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.
326 lines
12 KiB
326 lines
12 KiB
import 'package:flutter/material.dart';
|
|
import 'package:supplier_new/common/settings.dart';
|
|
|
|
class EditOrderRequests extends StatefulWidget {
|
|
var order;
|
|
String? advance;
|
|
var status;
|
|
EditOrderRequests({this.order,this.advance,this.status});
|
|
|
|
@override
|
|
State<EditOrderRequests> createState() => _EditOrderRequestsState();
|
|
}
|
|
|
|
class _EditOrderRequestsState extends State<EditOrderRequests> {
|
|
final TextEditingController tankerPriceController = TextEditingController();
|
|
final TextEditingController waterTypeController = TextEditingController();
|
|
final TextEditingController capacityController = TextEditingController();
|
|
final TextEditingController timeController = TextEditingController();
|
|
final TextEditingController quantityController = TextEditingController();
|
|
final TextEditingController advanceController = TextEditingController();
|
|
final TextEditingController dateController = TextEditingController();
|
|
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
tankerPriceController.text='${widget.order.quoted_amount}';
|
|
waterTypeController.text='${widget.order.type_of_water}';
|
|
quantityController.text='${widget.order.quantity}';
|
|
capacityController.text='${widget.order.capacity}';
|
|
timeController.text='${widget.order.averageTime}';
|
|
dateController.text='${widget.order.time}';
|
|
advanceController.text='${widget.advance}';
|
|
// Update summary in real-time as user types
|
|
tankerPriceController.addListener(() => setState(() {}));
|
|
/*capacityController.addListener(() => setState(() {}));
|
|
quantityController.addListener(() => setState(() {}));
|
|
dateController.addListener(() => setState(() {}));
|
|
timeController.addListener(() => setState(() {}));
|
|
waterTypeController.addListener(() => setState(() {}));*/
|
|
advanceController.addListener(() => setState(() {}));
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
int tankerPrice = int.tryParse(tankerPriceController.text) ?? 0;
|
|
int updatedQuantity=int.tryParse(quantityController.text) ?? 0;
|
|
String updatedCapacity=capacityController.text ?? '';
|
|
// Parse booking/advance as a double to accept "150.0" then convert to int (round)
|
|
double bookingChargesDouble = double.tryParse(advanceController.text.trim()) ?? 0.0;
|
|
int bookingCharges = bookingChargesDouble.round(); // or .toInt() / .floor() as you prefer
|
|
|
|
int totalPrice = (tankerPrice * updatedQuantity) + bookingCharges;
|
|
int advancePayable = bookingCharges; //
|
|
int amountToPayAfterDelivery=totalPrice-bookingCharges;
|
|
|
|
return Scaffold(
|
|
backgroundColor: Colors.white,
|
|
appBar: AppBar(
|
|
backgroundColor: Colors.white,
|
|
elevation: 0,
|
|
scrolledUnderElevation: 0,
|
|
title: Text(
|
|
'Edit Order',
|
|
style: fontTextStyle(16, Color(0XFF2A2A2A), FontWeight.w600),
|
|
),
|
|
leading: GestureDetector(
|
|
onTap: () {
|
|
Navigator.pop(context);
|
|
},
|
|
child: Padding(
|
|
padding:
|
|
const EdgeInsets.fromLTRB(16, 8, 8, 8), // Add padding if needed
|
|
child: Image.asset(
|
|
'images/cross.png', // Replace with your image path
|
|
fit: BoxFit.contain,
|
|
color: Color(0XFF2A2A2A),
|
|
height: 24,
|
|
width: 24,
|
|
|
|
),
|
|
),
|
|
),
|
|
iconTheme: IconThemeData(color: Color(0XFF2A2A2A)),
|
|
),
|
|
body: SingleChildScrollView(
|
|
padding: const EdgeInsets.all(16),
|
|
child: Column(
|
|
crossAxisAlignment: CrossAxisAlignment.start,
|
|
children: [
|
|
// 🔹 Club Info Card
|
|
Material(
|
|
elevation: 4, // shadow depth
|
|
borderRadius: BorderRadius.circular(12),
|
|
child: Container(
|
|
padding: const EdgeInsets.all(12),
|
|
decoration: BoxDecoration(
|
|
borderRadius: BorderRadius.circular(12),
|
|
color: Colors.white, // Material needs a background color
|
|
border: Border.all(color: Color(0XFFC9C2F0),width: 0.5),
|
|
),
|
|
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)
|
|
),
|
|
),
|
|
SizedBox(height: 4),
|
|
Text(
|
|
widget.order.building_name,
|
|
style: fontTextStyle(20, const Color(0XFF2D2E30), FontWeight.w600),
|
|
),
|
|
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 * .06,),
|
|
Text("ORDER DETAILS",
|
|
style: fontTextStyle(12, const Color(0XFF2D2E30), FontWeight.w600),),
|
|
const SizedBox(height: 12),
|
|
// 🔹 Two in a row
|
|
_twoFields(tankerPriceController, "Tanker Price",'images/price.png',false, null, null,null,null),
|
|
_twoFields(capacityController, "Capacity",'images/capacity.png',true,quantityController, "Quantity",'images/quantity.png',true),
|
|
_twoFields(waterTypeController, "Water Type",'images/water.png',true,advanceController, "Booking Charges",'images/advance.png',false),
|
|
_twoFields(dateController, "Date",'images/calendar_appbar.png',true,timeController, "Time Of Delivery",'images/time.png',true),
|
|
|
|
const SizedBox(height: 20),
|
|
Text("UPDATED PAYMENT SUMMARY",
|
|
style: fontTextStyle(12,Color(0XFF2D2E30),FontWeight.w600),),
|
|
const SizedBox(height: 12),
|
|
_summaryRow("Tanker Price", "₹ $tankerPrice"),
|
|
_summaryRow("Quantity", " $updatedQuantity"),
|
|
_summaryRow("Capacity", "$updatedCapacity"),
|
|
_summaryRow("Booking Charges", "₹ $bookingCharges"),
|
|
_summaryRow("Total Price", "₹ $totalPrice"),
|
|
const Divider(),
|
|
|
|
_summaryRow("Booking Charges Payable", "₹ $advancePayable"),
|
|
_summaryRow("Amount to Pay (After Delivery)", "₹ $amountToPayAfterDelivery"),
|
|
],
|
|
),
|
|
),
|
|
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(0xFFFFFFFF),
|
|
side: BorderSide(color: Color(0xFF939495)),
|
|
padding: EdgeInsets.symmetric(vertical: 10),
|
|
shape: RoundedRectangleBorder(
|
|
borderRadius: BorderRadius.circular(24), // <-- radius here
|
|
),
|
|
),
|
|
onPressed: () {
|
|
Navigator.pop(context);
|
|
},
|
|
child: Row(
|
|
mainAxisAlignment: MainAxisAlignment.center,
|
|
children: [
|
|
|
|
Text(
|
|
"Cancel",
|
|
style: fontTextStyle(14, const Color(0XFF000000), FontWeight.w400),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
const SizedBox(width: 8),
|
|
Expanded(
|
|
child: OutlinedButton(
|
|
style: OutlinedButton.styleFrom(
|
|
foregroundColor: Color(0XFFFFFFFF),
|
|
backgroundColor: Color(0xFF8270DB),
|
|
side: BorderSide(color: Color(0xFF8270DB)),
|
|
padding: EdgeInsets.symmetric(vertical: 10),
|
|
shape: RoundedRectangleBorder(
|
|
borderRadius: BorderRadius.circular(24), // <-- radius here
|
|
),
|
|
),
|
|
onPressed: () {
|
|
|
|
},
|
|
child: Row(
|
|
mainAxisAlignment: MainAxisAlignment.center,
|
|
children: [
|
|
|
|
Text(
|
|
"Send",
|
|
style: fontTextStyle(14, const Color(0XFFFFFFFF), FontWeight.w400),
|
|
),
|
|
SizedBox(width: 12),
|
|
Image.asset('images/send.png', height: 20, width: 20),
|
|
|
|
],
|
|
),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
);
|
|
}
|
|
|
|
/// 🔹 Two fields side by side
|
|
Widget _twoFields(TextEditingController? controller1, String? label1,String? path1, bool? readOnly1,
|
|
TextEditingController? controller2, String? label2,String? path2,bool? readOnly2) {
|
|
return Row(
|
|
children: [
|
|
Expanded(
|
|
child: _textField(controller1, label1,path1,readOnly1!),
|
|
),
|
|
const SizedBox(width: 10),
|
|
if (controller2 != null)
|
|
Expanded(
|
|
child: _textField(controller2, label2,path2,readOnly2!),
|
|
),
|
|
],
|
|
);
|
|
}
|
|
|
|
/// 🔹 Custom text field
|
|
Widget _textField(TextEditingController? controller, String? label,String? path,bool readOnly) {
|
|
return Container(
|
|
margin: const EdgeInsets.only(bottom: 12),
|
|
child: TextField(
|
|
controller: controller,
|
|
cursorColor: primaryColor,
|
|
readOnly: readOnly,
|
|
decoration: InputDecoration(
|
|
counterText: '',
|
|
filled: false,
|
|
fillColor: Colors.white,
|
|
prefixIcon: Padding(
|
|
padding: const EdgeInsets.symmetric(horizontal: 6.0, vertical: 6.0),
|
|
child: SizedBox(
|
|
width: 18,
|
|
height: 18,
|
|
child: Image.asset(
|
|
path!,
|
|
fit: BoxFit.contain,
|
|
color: Color(0XFFC3C4C4),
|
|
),
|
|
),
|
|
),
|
|
prefixIconConstraints: BoxConstraints(
|
|
minWidth: 24,
|
|
minHeight: 24,
|
|
),
|
|
border: OutlineInputBorder(
|
|
borderRadius: BorderRadius.circular(4.0),
|
|
borderSide: BorderSide(color: Color(0XFFC3C4C4),
|
|
width: 1,)),
|
|
focusedBorder: !readOnly?OutlineInputBorder(
|
|
borderRadius: BorderRadius.circular(4.0),
|
|
borderSide: BorderSide(color: Color(0XFF8270DB),width: 1,),
|
|
):OutlineInputBorder(
|
|
borderRadius: BorderRadius.circular(4.0),
|
|
borderSide: BorderSide(color: Color(0XFFC3C4C4),width: 1,),
|
|
),
|
|
|
|
enabledBorder: OutlineInputBorder(
|
|
borderRadius: BorderRadius.circular(4.0),
|
|
borderSide: BorderSide(color: Color(0XFFC3C4C4)),
|
|
),
|
|
labelText: label,
|
|
labelStyle:fontTextStyle(12,Color(0XFF646566),FontWeight.w400),
|
|
/* TextStyle(color: greyColor, fontWeight: FontWeight.bold //<-- SEE HERE
|
|
),*/
|
|
),
|
|
style:fontTextStyle(12,Color(0XFF343637),FontWeight.w500),
|
|
),
|
|
);
|
|
}
|
|
|
|
/// 🔹 Summary row
|
|
Widget _summaryRow(String title, String value) {
|
|
return Padding(
|
|
padding: const EdgeInsets.symmetric(vertical: 6),
|
|
child: Row(
|
|
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
|
children: [
|
|
Text(title, style: fontTextStyle(12,Color(0XFF646566),FontWeight.w400),),
|
|
Text(value,
|
|
style: fontTextStyle(12,Color(0XFF2D2E30),FontWeight.w500),),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
|
|
}
|