From 5238e245f44f8c7da196681a93921014cb1925e8 Mon Sep 17 00:00:00 2001 From: venba-Inspriron-3558 Date: Mon, 9 Jun 2025 12:15:55 +0530 Subject: [PATCH] issues fixes --- lib/Screens/department/departmentDetails.dart | 37 ++-- lib/Screens/itnerary/bus.dart | 36 +++- lib/Screens/itnerary/taxi.dart | 174 ++++++++++++------ 3 files changed, 166 insertions(+), 81 deletions(-) diff --git a/lib/Screens/department/departmentDetails.dart b/lib/Screens/department/departmentDetails.dart index faa0ca3..4d461fb 100644 --- a/lib/Screens/department/departmentDetails.dart +++ b/lib/Screens/department/departmentDetails.dart @@ -196,24 +196,27 @@ class DepartmentDataState extends State { ? await http.put(uri, headers: headers, body: body) : await http.post(uri, headers: headers, body: body); - switch (response.statusCode) { - case 200: - print("Update - Response: ${response.body}"); - _clearError(); - widget.fetchGetDepartment(); - Navigator.of(context).pop(); - break; + if (response.statusCode == 200 || response.statusCode == 201) { + print("successfully!"); + print("Response: ${response.body}"); + _clearError(); + widget.fetchGetDepartment(); + // dispose(); + Navigator.of(context).pop(); + } else if (response.statusCode == 404) { + Navigator.of(context).pop(); + final message = jsonDecode(response.body)['message'] ?? 'Unknown error'; - case 201: - print("Save - Response: ${response.body}"); - _clearError(); - await widget.fetchGetDepartment(); - Navigator.of(context).pop(); - break; - - default: - print("Failed to submit department. Status: ${response.statusCode}"); - print("Error: ${response.body}"); + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text(message), + backgroundColor: Colors.redAccent, + behavior: SnackBarBehavior.floating, + ), + ); + } else { + print("Failed to submit. Status: ${response.statusCode}"); + print("Error: ${response.body}"); } } catch (e) { print(" Error submitting plan: $e"); diff --git a/lib/Screens/itnerary/bus.dart b/lib/Screens/itnerary/bus.dart index 56c39b4..8923afa 100644 --- a/lib/Screens/itnerary/bus.dart +++ b/lib/Screens/itnerary/bus.dart @@ -384,7 +384,37 @@ class _BusScreenState extends State { ); 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; // Formatting time to HH:mm (24-hour format) final now = DateTime.now(); @@ -393,7 +423,7 @@ class _BusScreenState extends State { pickedTime.minute), ); _timeController.text = formattedTime; - }); + }); } } } @@ -580,7 +610,7 @@ class _BusScreenState extends State { if (errorMessages["time"] != null) ...[ SizedBox(height: 5), // Space before error message Text( - "Required", + errorMessages["time"]!, style: TextStyle(color: Colors.red, fontSize: 12), ), ], diff --git a/lib/Screens/itnerary/taxi.dart b/lib/Screens/itnerary/taxi.dart index 077563b..2f559fa 100644 --- a/lib/Screens/itnerary/taxi.dart +++ b/lib/Screens/itnerary/taxi.dart @@ -99,7 +99,7 @@ class _TaxiScreenState extends State { _addFocusListener( _destinationFocusNode, - (focus) => _destinationFocus = focus, + (focus) => _destinationFocus = focus, ); _addFocusListener(_locationFocusNode, (focus) => _locationFocus = focus); _addFocusListener(_dateFocusNode, (focus) => _dateFocus = focus); @@ -107,7 +107,7 @@ class _TaxiScreenState extends State { _addFocusListener(_taxiReqFocusNode, (focus) => _taxiReqFocused = focus); _addFocusListener( _numPassengerFocusNode, - (focus) => _numPassengerFocus = focus, + (focus) => _numPassengerFocus = focus, ); _addFocusListener(_commentsFocusNode, (focus) => _commentsFocus = focus); @@ -262,14 +262,14 @@ class _TaxiScreenState extends State { List purposeList = widget.apiData?['taxt_car_type'] ?? []; List> dropdownItems = - purposeList - .map( - (item) => DropdownMenuItem( - value: item['dropdown_key'], - child: Text(item['dropdown_value']), - ), - ) - .toList(); + purposeList + .map( + (item) => DropdownMenuItem( + value: item['dropdown_key'], + child: Text(item['dropdown_value']), + ), + ) + .toList(); if (dropdownItems.isEmpty) { dropdownItems.add( @@ -285,7 +285,7 @@ class _TaxiScreenState extends State { // Default selected value selectedCarType ??= - dropdownItems.isNotEmpty ? dropdownItems.first.value : null; + dropdownItems.isNotEmpty ? dropdownItems.first.value : null; return [ Column( @@ -378,16 +378,16 @@ class _TaxiScreenState extends State { ), // Proper padding ), onChanged: - purposeList.isNotEmpty - ? (newValue) { - setState(() { - selectedCarType = newValue; - }); - print( - "Updating form data: Flight -> trip_type -> ${newValue ?? ""}", - ); - } - : null, + purposeList.isNotEmpty + ? (newValue) { + setState(() { + selectedCarType = newValue; + }); + print( + "Updating form data: Flight -> trip_type -> ${newValue ?? ""}", + ); + } + : null, items: dropdownItems, ), @@ -403,14 +403,14 @@ class _TaxiScreenState extends State { List purposeList = widget.apiData?['taxi_car_required_for'] ?? []; List> dropdownItems = - purposeList - .map( - (item) => DropdownMenuItem( - value: item['dropdown_key'], - child: Text(item['dropdown_value']), - ), - ) - .toList(); + purposeList + .map( + (item) => DropdownMenuItem( + value: item['dropdown_key'], + child: Text(item['dropdown_value']), + ), + ) + .toList(); if (dropdownItems.isEmpty) { dropdownItems.add( @@ -426,16 +426,16 @@ class _TaxiScreenState extends State { // Default selected value selectedReqTaxi ??= - dropdownItems.isNotEmpty ? dropdownItems.first.value : null; + dropdownItems.isNotEmpty ? dropdownItems.first.value : null; return [ CustomTextFieldWrapper( isFocused: _taxiReqFocused, isDesktop: isDesktop, width: - isDesktop - ? MediaQuery.of(context).size.width * 0.34 - : MediaQuery.of(context).size.width * 0.66, + isDesktop + ? MediaQuery.of(context).size.width * 0.34 + : MediaQuery.of(context).size.width * 0.66, child: SizedBox( height: 40, child: DropdownButtonFormField( @@ -449,16 +449,16 @@ class _TaxiScreenState extends State { ), // Proper padding ), onChanged: - purposeList.isNotEmpty - ? (newValue) { - setState(() { - selectedReqTaxi = newValue; - }); - print( - "Updating form data: Flight -> trip_type -> ${newValue ?? ""}", - ); - } - : null, + purposeList.isNotEmpty + ? (newValue) { + setState(() { + selectedReqTaxi = newValue; + }); + print( + "Updating form data: Flight -> trip_type -> ${newValue ?? ""}", + ); + } + : null, items: dropdownItems, ), @@ -478,10 +478,10 @@ class _TaxiScreenState extends State { DateTime? pickedDate = await showDatePicker( context: context, initialDate: - _selectedCheckOutDate != null && - _selectedCheckOutDate!.isAfter(today) - ? _selectedCheckOutDate! - : today, + _selectedCheckOutDate != null && + _selectedCheckOutDate!.isAfter(today) + ? _selectedCheckOutDate! + : today, firstDate: today, lastDate: DateTime(2100), ); @@ -501,24 +501,75 @@ class _TaxiScreenState extends State { ); 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; // 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, - ), + DateTime(now.year, now.month, now.day, pickedTime.hour, + pickedTime.minute), ); + errorMessages["time"] = ""; _timeController.text = formattedTime; - }); + }); } } } + // Future _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 [ Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -687,7 +738,8 @@ class _TaxiScreenState extends State { ), if (errorMessages["time"] != null) ...[ 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 { isFocused: _commentsFocus, // Dropdown doesn't use focus isDesktop: isDesktop, width: - isDesktop - ? MediaQuery.of(context).size.width * 0.34 - : MediaQuery.of(context).size.width * 0.66, + isDesktop + ? MediaQuery.of(context).size.width * 0.34 + : MediaQuery.of(context).size.width * 0.66, child: SizedBox( height: 40, @@ -782,4 +834,4 @@ class _TaxiScreenState extends State { ), ]; } -} +} \ No newline at end of file