issues fixes

This commit is contained in:
venba-Inspriron-3558 2025-06-09 12:15:55 +05:30
parent e00b27f994
commit 5238e245f4
3 changed files with 166 additions and 81 deletions

View File

@ -196,24 +196,27 @@ class DepartmentDataState extends State<DepartmentData> {
? await http.put(uri, headers: headers, body: body) ? await http.put(uri, headers: headers, body: body)
: await http.post(uri, headers: headers, body: body); : await http.post(uri, headers: headers, body: body);
switch (response.statusCode) { if (response.statusCode == 200 || response.statusCode == 201) {
case 200: print("successfully!");
print("Update - Response: ${response.body}"); print("Response: ${response.body}");
_clearError(); _clearError();
widget.fetchGetDepartment(); widget.fetchGetDepartment();
Navigator.of(context).pop(); // dispose();
break; Navigator.of(context).pop();
} else if (response.statusCode == 404) {
Navigator.of(context).pop();
final message = jsonDecode(response.body)['message'] ?? 'Unknown error';
case 201: ScaffoldMessenger.of(context).showSnackBar(
print("Save - Response: ${response.body}"); SnackBar(
_clearError(); content: Text(message),
await widget.fetchGetDepartment(); backgroundColor: Colors.redAccent,
Navigator.of(context).pop(); behavior: SnackBarBehavior.floating,
break; ),
);
default: } else {
print("Failed to submit department. Status: ${response.statusCode}"); print("Failed to submit. Status: ${response.statusCode}");
print("Error: ${response.body}"); print("Error: ${response.body}");
} }
} catch (e) { } catch (e) {
print(" Error submitting plan: $e"); print(" Error submitting plan: $e");

View File

@ -384,7 +384,37 @@ class _BusScreenState extends State<BusScreen> {
); );
if (pickedTime != null && pickedTime != _selectedCheckOutTime) { if (pickedTime != null && pickedTime != _selectedCheckOutTime) {
setState(() { // Parse the selected date
final dateText = _dateController.text ?? "";
final selectedDate = DateFormat(
'dd-MM-yyyy',
).parse(dateText); // or 'yyyy-MM-dd' depending on your format
final now = DateTime.now();
final selectedDateTime = DateTime(
selectedDate.year,
selectedDate.month,
selectedDate.day,
pickedTime.hour,
pickedTime.minute,
);
final isToday =
selectedDate.year == now.year &&
selectedDate.month == now.month &&
selectedDate.day == now.day;
bool isPastTime = selectedDateTime.isBefore(now);
if (isToday && isPastTime) {
setState(() {
errorMessages["time"] = "You can't select a past time.";
_selectedCheckOutTime = null; // Reset time variable
_timeController.text = ""; // Clear text field
});
return;
}else{ setState(() {
_selectedCheckOutTime = pickedTime; _selectedCheckOutTime = pickedTime;
// Formatting time to HH:mm (24-hour format) // Formatting time to HH:mm (24-hour format)
final now = DateTime.now(); final now = DateTime.now();
@ -393,7 +423,7 @@ class _BusScreenState extends State<BusScreen> {
pickedTime.minute), pickedTime.minute),
); );
_timeController.text = formattedTime; _timeController.text = formattedTime;
}); }); }
} }
} }
@ -580,7 +610,7 @@ class _BusScreenState extends State<BusScreen> {
if (errorMessages["time"] != null) ...[ if (errorMessages["time"] != null) ...[
SizedBox(height: 5), // Space before error message SizedBox(height: 5), // Space before error message
Text( Text(
"Required", errorMessages["time"]!,
style: TextStyle(color: Colors.red, fontSize: 12), style: TextStyle(color: Colors.red, fontSize: 12),
), ),
], ],

View File

@ -99,7 +99,7 @@ class _TaxiScreenState extends State<TaxiScreen> {
_addFocusListener( _addFocusListener(
_destinationFocusNode, _destinationFocusNode,
(focus) => _destinationFocus = focus, (focus) => _destinationFocus = focus,
); );
_addFocusListener(_locationFocusNode, (focus) => _locationFocus = focus); _addFocusListener(_locationFocusNode, (focus) => _locationFocus = focus);
_addFocusListener(_dateFocusNode, (focus) => _dateFocus = focus); _addFocusListener(_dateFocusNode, (focus) => _dateFocus = focus);
@ -107,7 +107,7 @@ class _TaxiScreenState extends State<TaxiScreen> {
_addFocusListener(_taxiReqFocusNode, (focus) => _taxiReqFocused = focus); _addFocusListener(_taxiReqFocusNode, (focus) => _taxiReqFocused = focus);
_addFocusListener( _addFocusListener(
_numPassengerFocusNode, _numPassengerFocusNode,
(focus) => _numPassengerFocus = focus, (focus) => _numPassengerFocus = focus,
); );
_addFocusListener(_commentsFocusNode, (focus) => _commentsFocus = focus); _addFocusListener(_commentsFocusNode, (focus) => _commentsFocus = focus);
@ -262,14 +262,14 @@ class _TaxiScreenState extends State<TaxiScreen> {
List<dynamic> purposeList = widget.apiData?['taxt_car_type'] ?? []; List<dynamic> purposeList = widget.apiData?['taxt_car_type'] ?? [];
List<DropdownMenuItem<String>> dropdownItems = List<DropdownMenuItem<String>> dropdownItems =
purposeList purposeList
.map( .map(
(item) => DropdownMenuItem<String>( (item) => DropdownMenuItem<String>(
value: item['dropdown_key'], value: item['dropdown_key'],
child: Text(item['dropdown_value']), child: Text(item['dropdown_value']),
), ),
) )
.toList(); .toList();
if (dropdownItems.isEmpty) { if (dropdownItems.isEmpty) {
dropdownItems.add( dropdownItems.add(
@ -285,7 +285,7 @@ class _TaxiScreenState extends State<TaxiScreen> {
// Default selected value // Default selected value
selectedCarType ??= selectedCarType ??=
dropdownItems.isNotEmpty ? dropdownItems.first.value : null; dropdownItems.isNotEmpty ? dropdownItems.first.value : null;
return [ return [
Column( Column(
@ -378,16 +378,16 @@ class _TaxiScreenState extends State<TaxiScreen> {
), // Proper padding ), // Proper padding
), ),
onChanged: onChanged:
purposeList.isNotEmpty purposeList.isNotEmpty
? (newValue) { ? (newValue) {
setState(() { setState(() {
selectedCarType = newValue; selectedCarType = newValue;
}); });
print( print(
"Updating form data: Flight -> trip_type -> ${newValue ?? ""}", "Updating form data: Flight -> trip_type -> ${newValue ?? ""}",
); );
} }
: null, : null,
items: dropdownItems, items: dropdownItems,
), ),
@ -403,14 +403,14 @@ class _TaxiScreenState extends State<TaxiScreen> {
List<dynamic> purposeList = widget.apiData?['taxi_car_required_for'] ?? []; List<dynamic> purposeList = widget.apiData?['taxi_car_required_for'] ?? [];
List<DropdownMenuItem<String>> dropdownItems = List<DropdownMenuItem<String>> dropdownItems =
purposeList purposeList
.map( .map(
(item) => DropdownMenuItem<String>( (item) => DropdownMenuItem<String>(
value: item['dropdown_key'], value: item['dropdown_key'],
child: Text(item['dropdown_value']), child: Text(item['dropdown_value']),
), ),
) )
.toList(); .toList();
if (dropdownItems.isEmpty) { if (dropdownItems.isEmpty) {
dropdownItems.add( dropdownItems.add(
@ -426,16 +426,16 @@ class _TaxiScreenState extends State<TaxiScreen> {
// Default selected value // Default selected value
selectedReqTaxi ??= selectedReqTaxi ??=
dropdownItems.isNotEmpty ? dropdownItems.first.value : null; dropdownItems.isNotEmpty ? dropdownItems.first.value : null;
return [ return [
CustomTextFieldWrapper( CustomTextFieldWrapper(
isFocused: _taxiReqFocused, isFocused: _taxiReqFocused,
isDesktop: isDesktop, isDesktop: isDesktop,
width: width:
isDesktop isDesktop
? MediaQuery.of(context).size.width * 0.34 ? MediaQuery.of(context).size.width * 0.34
: MediaQuery.of(context).size.width * 0.66, : MediaQuery.of(context).size.width * 0.66,
child: SizedBox( child: SizedBox(
height: 40, height: 40,
child: DropdownButtonFormField<String>( child: DropdownButtonFormField<String>(
@ -449,16 +449,16 @@ class _TaxiScreenState extends State<TaxiScreen> {
), // Proper padding ), // Proper padding
), ),
onChanged: onChanged:
purposeList.isNotEmpty purposeList.isNotEmpty
? (newValue) { ? (newValue) {
setState(() { setState(() {
selectedReqTaxi = newValue; selectedReqTaxi = newValue;
}); });
print( print(
"Updating form data: Flight -> trip_type -> ${newValue ?? ""}", "Updating form data: Flight -> trip_type -> ${newValue ?? ""}",
); );
} }
: null, : null,
items: dropdownItems, items: dropdownItems,
), ),
@ -478,10 +478,10 @@ class _TaxiScreenState extends State<TaxiScreen> {
DateTime? pickedDate = await showDatePicker( DateTime? pickedDate = await showDatePicker(
context: context, context: context,
initialDate: initialDate:
_selectedCheckOutDate != null && _selectedCheckOutDate != null &&
_selectedCheckOutDate!.isAfter(today) _selectedCheckOutDate!.isAfter(today)
? _selectedCheckOutDate! ? _selectedCheckOutDate!
: today, : today,
firstDate: today, firstDate: today,
lastDate: DateTime(2100), lastDate: DateTime(2100),
); );
@ -501,24 +501,75 @@ class _TaxiScreenState extends State<TaxiScreen> {
); );
if (pickedTime != null && pickedTime != _selectedCheckOutTime) { if (pickedTime != null && pickedTime != _selectedCheckOutTime) {
setState(() { // Parse the selected date
final dateText = _dateController.text ?? "";
final selectedDate = DateFormat(
'dd-MM-yyyy',
).parse(dateText); // or 'yyyy-MM-dd' depending on your format
final now = DateTime.now();
final selectedDateTime = DateTime(
selectedDate.year,
selectedDate.month,
selectedDate.day,
pickedTime.hour,
pickedTime.minute,
);
final isToday =
selectedDate.year == now.year &&
selectedDate.month == now.month &&
selectedDate.day == now.day;
bool isPastTime = selectedDateTime.isBefore(now);
if (isToday && isPastTime) {
setState(() {
errorMessages["time"] = "You can't select a past time.";
_selectedCheckOutTime = null; // Reset time variable
_timeController.text = ""; // Clear text field
});
return;
}else{ setState(() {
_selectedCheckOutTime = pickedTime; _selectedCheckOutTime = pickedTime;
// Formatting time to HH:mm (24-hour format) // Formatting time to HH:mm (24-hour format)
final now = DateTime.now(); final now = DateTime.now();
final formattedTime = DateFormat('HH:mm').format( final formattedTime = DateFormat('HH:mm').format(
DateTime( DateTime(now.year, now.month, now.day, pickedTime.hour,
now.year, pickedTime.minute),
now.month,
now.day,
pickedTime.hour,
pickedTime.minute,
),
); );
errorMessages["time"] = "";
_timeController.text = formattedTime; _timeController.text = formattedTime;
}); }); }
} }
} }
// Future<void> _selectCheckOutTime(BuildContext context) async {
// TimeOfDay? pickedTime = await showTimePicker(
// context: context,
// initialTime: _selectedCheckOutTime ?? TimeOfDay.now(),
// );
//
// if (pickedTime != null && pickedTime != _selectedCheckOutTime) {
// setState(() {
// _selectedCheckOutTime = pickedTime;
// // Formatting time to HH:mm (24-hour format)
// final now = DateTime.now();
// final formattedTime = DateFormat('HH:mm').format(
// DateTime(
// now.year,
// now.month,
// now.day,
// pickedTime.hour,
// pickedTime.minute,
// ),
// );
// _timeController.text = formattedTime;
// });
// }
// }
return [ return [
Column( Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
@ -687,7 +738,8 @@ class _TaxiScreenState extends State<TaxiScreen> {
), ),
if (errorMessages["time"] != null) ...[ if (errorMessages["time"] != null) ...[
SizedBox(height: 5), // Space before error message SizedBox(height: 5), // Space before error message
Text("Required", style: TextStyle(color: Colors.red, fontSize: 12)), // Text("Required", style: TextStyle(color: Colors.red, fontSize: 12)),
Text(errorMessages["time"]!, style: TextStyle(color: Colors.red, fontSize: 12)),
], ],
], ],
), ),
@ -712,9 +764,9 @@ class _TaxiScreenState extends State<TaxiScreen> {
isFocused: _commentsFocus, // Dropdown doesn't use focus isFocused: _commentsFocus, // Dropdown doesn't use focus
isDesktop: isDesktop, isDesktop: isDesktop,
width: width:
isDesktop isDesktop
? MediaQuery.of(context).size.width * 0.34 ? MediaQuery.of(context).size.width * 0.34
: MediaQuery.of(context).size.width * 0.66, : MediaQuery.of(context).size.width * 0.66,
child: SizedBox( child: SizedBox(
height: 40, height: 40,