flight trips validation

This commit is contained in:
venbaittech 2025-06-25 12:34:44 +05:30
parent d2aef160c5
commit efa0294820
2 changed files with 128 additions and 76 deletions

View File

@ -973,7 +973,6 @@ class FlightScreenState extends State<FlightScreen> {
}
List<String> filterAndSortCountryList(List<String> items, String filter) {
final lowerFilter = filter.toLowerCase();
int getMatchScore(String item) {
@ -995,25 +994,22 @@ class FlightScreenState extends State<FlightScreen> {
return 999;
}
return items
.where((item) {
final parts = item.split('\n');
final cityAndCode = parts[0];
final airport = parts.length > 1 ? parts[1].toLowerCase() : '';
return items.where((item) {
final parts = item.split('\n');
final cityAndCode = parts[0];
final airport = parts.length > 1 ? parts[1].toLowerCase() : '';
final match = RegExp(r'^(.*)\s+\(([^)]+)\)$').firstMatch(cityAndCode);
final city = match?.group(1)?.toLowerCase() ?? '';
final code = match?.group(2)?.toLowerCase() ?? '';
final match = RegExp(r'^(.*)\s+\(([^)]+)\)$').firstMatch(cityAndCode);
final city = match?.group(1)?.toLowerCase() ?? '';
final code = match?.group(2)?.toLowerCase() ?? '';
return code.contains(lowerFilter) ||
city.contains(lowerFilter) ||
airport.contains(lowerFilter);
})
.toList()
return code.contains(lowerFilter) ||
city.contains(lowerFilter) ||
airport.contains(lowerFilter);
}).toList()
..sort((a, b) => getMatchScore(a).compareTo(getMatchScore(b)));
}
List<Widget> _buildFirstRow(isDesktop) {
return [
Column(
@ -1524,8 +1520,6 @@ class FlightScreenState extends State<FlightScreen> {
// }
}
return [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
@ -1573,13 +1567,14 @@ class FlightScreenState extends State<FlightScreen> {
selectedFrom[index] != null
? countryMap[selectedFrom[index]]
: null,
asyncItems: (String filter) async {
final allItems = countryMap.values.toSet().toList();
print("Original items: ${allItems.length}");
final filtered = filterAndSortCountryList(allItems, filter);
// print("Filtered items: ${filtered.length} -> $filtered");
return filtered;
},
items: countryMap.values.toList(),
// asyncItems: (String filter) async {
// final allItems = countryMap.values.toSet().toList();
// print("Original items: ${allItems.length}");
// final filtered = filterAndSortCountryList(allItems, filter);
// // print("Filtered items: ${filtered.length} -> $filtered");
// return filtered;
// },
popupProps: PopupProps.menu(
fit: FlexFit.loose,
constraints: BoxConstraints(maxHeight: 220),
@ -2876,6 +2871,4 @@ class FlightScreenState extends State<FlightScreen> {
),
];
}
}

View File

@ -5,6 +5,7 @@ import 'package:dropdown_search/dropdown_search.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_quill/flutter_quill_internal.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:http/http.dart' as http;
import 'package:intl/intl.dart';
@ -421,14 +422,12 @@ class PersonalDetailsState extends State<PersonalDetails> {
child:
isDesktop
? SingleChildScrollView(
scrollDirection: Axis.vertical,
child: SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: Row(
children: _buildOptions(),
),
),
)
scrollDirection: Axis.vertical,
child: SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: Row(children: _buildOptions()),
),
)
: Expanded(
child: SingleChildScrollView(
scrollDirection: Axis.horizontal,
@ -587,9 +586,12 @@ class PersonalDetailsState extends State<PersonalDetails> {
Spacer(),
buildLastNameField(),
Spacer(), // Space after Last Name
buildGenderField(),
SizedBox(width: 15),
buildDobField(),
// buildGenderField(),
// SizedBox(width: 15),
// buildDobField(),
buildMobileField(),
Spacer(),
buildAlternateMobileField(),
],
)
: Column(
@ -599,9 +601,12 @@ class PersonalDetailsState extends State<PersonalDetails> {
SizedBox(height: 8), // Vertical space
buildLastNameField(),
SizedBox(height: 8),
buildGenderField(),
SizedBox(height: 8),
buildDobField(),
// buildGenderField(),
// SizedBox(height: 8),
// buildDobField(),
buildMobileField(),
SizedBox(height: 8), // Space after Last Name
buildAlternateMobileField(),
],
),
);
@ -615,21 +620,21 @@ class PersonalDetailsState extends State<PersonalDetails> {
? Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
buildEmailField(),
Spacer(),
buildMobileField(),
Spacer(), // Space after Last Name
buildAlternateMobileField(),
// buildEmailField(),
// Spacer(),
// buildMobileField(),
// Spacer(), // Space after Last Name
// buildAlternateMobileField(),
],
)
: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
buildMobileField(),
SizedBox(height: 8), // Vertical space
buildAlternateMobileField(),
SizedBox(height: 8),
buildEmailField(),
// buildMobileField(),
// SizedBox(height: 8), // Vertical space
// buildAlternateMobileField(),
// SizedBox(height: 8),
// buildEmailField(),
],
),
);
@ -662,6 +667,8 @@ class PersonalDetailsState extends State<PersonalDetails> {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
if (!widget.apiselectedUser) ...[
buildEmailField(),
Spacer(),
buildPassword(),
SizedBox(
width: MediaQuery.of(context).size.width * 0.015,
@ -670,33 +677,37 @@ class PersonalDetailsState extends State<PersonalDetails> {
],
],
)
: Column(
: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
width:
isDesktop
? MediaQuery.of(context).size.width * 0.25
: MediaQuery.of(context).size.width * 0.8,
child: Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
TextButton(
onPressed: () => _openPopup(),
style: TextButton.styleFrom(
foregroundColor: Color(0xFF114D8B),
textStyle: GoogleFonts.poppins(
fontSize: 12,
fontWeight: FontWeight.w400,
),
),
child: Text("Change Password"),
),
],
),
),
SizedBox(height: 1),
buildEmailField(),
SizedBox(width: 10),
// Spacer(),
// Container(
// width:
// isDesktop
// ? MediaQuery.of(context).size.width * 0.25
// : MediaQuery.of(context).size.width * 0.8,
// child: Row(
// mainAxisAlignment: MainAxisAlignment.end,
// children: [
// TextButton(
// onPressed: () => _openPopup(),
// style: TextButton.styleFrom(
// foregroundColor: Color(0xFF114D8B),
// textStyle: GoogleFonts.poppins(
// fontSize: 12,
// fontWeight: FontWeight.w400,
// ),
// ),
// child: Text("Change Password"),
// ),
// ],
// ),
// ),
buildchangPswd(),
// SizedBox(height: 1),
Spacer(),
buildRole(),
],
)
@ -704,6 +715,8 @@ class PersonalDetailsState extends State<PersonalDetails> {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
if (!widget.apiselectedUser) ...[
buildEmailField(),
SizedBox(height: 8),
buildPassword(),
SizedBox(height: 8),
buildRole(),
@ -1038,6 +1051,50 @@ class PersonalDetailsState extends State<PersonalDetails> {
);
}
Widget buildchangPswd() {
void _openPopup() {
final emailValue = widget.controllers["email"]?.text ?? "";
final updaterUserId = widget.userIdApi ?? "";
showDialog(
context: context,
builder: (context) {
return ChangePasswordDialogData(
updaterEmail: emailValue,
updaterUserId: updaterUserId,
layoutColor: layoutColor,
isDesktop: widget.isDesktop,
);
},
);
}
return Container(
width:
isDesktop
? MediaQuery.of(context).size.width * 0.25
: MediaQuery.of(context).size.width * 0.8,
child: Column(
// mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(height: 30),
TextButton(
onPressed: () => _openPopup(),
style: TextButton.styleFrom(
foregroundColor: Color(0xFF114D8B),
textStyle: GoogleFonts.poppins(
fontSize: 12,
fontWeight: FontWeight.w400,
),
),
child: Text("Change Password"),
),
],
),
);
}
Widget buildEmailField() {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
@ -1104,6 +1161,7 @@ class PersonalDetailsState extends State<PersonalDetails> {
CustomTextFieldUserWrapper(
isFocused: false,
isDesktop: widget.isDesktop,
width: MediaQuery.of(context).size.width * 0.12,
child: SizedBox(
height: 40,
child: TextField(
@ -1165,6 +1223,7 @@ class PersonalDetailsState extends State<PersonalDetails> {
CustomTextFieldUserWrapper(
isFocused: false,
isDesktop: widget.isDesktop,
width: MediaQuery.of(context).size.width * 0.12,
child: SizedBox(
height: 40,
child: TextField(
@ -1272,7 +1331,7 @@ class PersonalDetailsState extends State<PersonalDetails> {
),
child: Padding(
// padding: const EdgeInsets.all(3.0),
padding: EdgeInsets.symmetric(horizontal: 2,vertical: 3),
padding: EdgeInsets.symmetric(horizontal: 2, vertical: 3),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [