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) { List<String> filterAndSortCountryList(List<String> items, String filter) {
final lowerFilter = filter.toLowerCase(); final lowerFilter = filter.toLowerCase();
int getMatchScore(String item) { int getMatchScore(String item) {
@ -995,25 +994,22 @@ class FlightScreenState extends State<FlightScreen> {
return 999; return 999;
} }
return items return items.where((item) {
.where((item) { final parts = item.split('\n');
final parts = item.split('\n'); final cityAndCode = parts[0];
final cityAndCode = parts[0]; final airport = parts.length > 1 ? parts[1].toLowerCase() : '';
final airport = parts.length > 1 ? parts[1].toLowerCase() : '';
final match = RegExp(r'^(.*)\s+\(([^)]+)\)$').firstMatch(cityAndCode); final match = RegExp(r'^(.*)\s+\(([^)]+)\)$').firstMatch(cityAndCode);
final city = match?.group(1)?.toLowerCase() ?? ''; final city = match?.group(1)?.toLowerCase() ?? '';
final code = match?.group(2)?.toLowerCase() ?? ''; final code = match?.group(2)?.toLowerCase() ?? '';
return code.contains(lowerFilter) || return code.contains(lowerFilter) ||
city.contains(lowerFilter) || city.contains(lowerFilter) ||
airport.contains(lowerFilter); airport.contains(lowerFilter);
}) }).toList()
.toList()
..sort((a, b) => getMatchScore(a).compareTo(getMatchScore(b))); ..sort((a, b) => getMatchScore(a).compareTo(getMatchScore(b)));
} }
List<Widget> _buildFirstRow(isDesktop) { List<Widget> _buildFirstRow(isDesktop) {
return [ return [
Column( Column(
@ -1524,8 +1520,6 @@ class FlightScreenState extends State<FlightScreen> {
// } // }
} }
return [ return [
Column( Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
@ -1573,13 +1567,14 @@ class FlightScreenState extends State<FlightScreen> {
selectedFrom[index] != null selectedFrom[index] != null
? countryMap[selectedFrom[index]] ? countryMap[selectedFrom[index]]
: null, : null,
asyncItems: (String filter) async { items: countryMap.values.toList(),
final allItems = countryMap.values.toSet().toList(); // asyncItems: (String filter) async {
print("Original items: ${allItems.length}"); // final allItems = countryMap.values.toSet().toList();
final filtered = filterAndSortCountryList(allItems, filter); // print("Original items: ${allItems.length}");
// print("Filtered items: ${filtered.length} -> $filtered"); // final filtered = filterAndSortCountryList(allItems, filter);
return filtered; // // print("Filtered items: ${filtered.length} -> $filtered");
}, // return filtered;
// },
popupProps: PopupProps.menu( popupProps: PopupProps.menu(
fit: FlexFit.loose, fit: FlexFit.loose,
constraints: BoxConstraints(maxHeight: 220), 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/cupertino.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_quill/flutter_quill_internal.dart';
import 'package:google_fonts/google_fonts.dart'; import 'package:google_fonts/google_fonts.dart';
import 'package:http/http.dart' as http; import 'package:http/http.dart' as http;
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
@ -421,14 +422,12 @@ class PersonalDetailsState extends State<PersonalDetails> {
child: child:
isDesktop isDesktop
? SingleChildScrollView( ? SingleChildScrollView(
scrollDirection: Axis.vertical, scrollDirection: Axis.vertical,
child: SingleChildScrollView( child: SingleChildScrollView(
scrollDirection: Axis.horizontal, scrollDirection: Axis.horizontal,
child: Row( child: Row(children: _buildOptions()),
children: _buildOptions(), ),
), )
),
)
: Expanded( : Expanded(
child: SingleChildScrollView( child: SingleChildScrollView(
scrollDirection: Axis.horizontal, scrollDirection: Axis.horizontal,
@ -587,9 +586,12 @@ class PersonalDetailsState extends State<PersonalDetails> {
Spacer(), Spacer(),
buildLastNameField(), buildLastNameField(),
Spacer(), // Space after Last Name Spacer(), // Space after Last Name
buildGenderField(), // buildGenderField(),
SizedBox(width: 15), // SizedBox(width: 15),
buildDobField(), // buildDobField(),
buildMobileField(),
Spacer(),
buildAlternateMobileField(),
], ],
) )
: Column( : Column(
@ -599,9 +601,12 @@ class PersonalDetailsState extends State<PersonalDetails> {
SizedBox(height: 8), // Vertical space SizedBox(height: 8), // Vertical space
buildLastNameField(), buildLastNameField(),
SizedBox(height: 8), SizedBox(height: 8),
buildGenderField(), // buildGenderField(),
SizedBox(height: 8), // SizedBox(height: 8),
buildDobField(), // buildDobField(),
buildMobileField(),
SizedBox(height: 8), // Space after Last Name
buildAlternateMobileField(),
], ],
), ),
); );
@ -615,21 +620,21 @@ class PersonalDetailsState extends State<PersonalDetails> {
? Row( ? Row(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
buildEmailField(), // buildEmailField(),
Spacer(), // Spacer(),
buildMobileField(), // buildMobileField(),
Spacer(), // Space after Last Name // Spacer(), // Space after Last Name
buildAlternateMobileField(), // buildAlternateMobileField(),
], ],
) )
: Column( : Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
buildMobileField(), // buildMobileField(),
SizedBox(height: 8), // Vertical space // SizedBox(height: 8), // Vertical space
buildAlternateMobileField(), // buildAlternateMobileField(),
SizedBox(height: 8), // SizedBox(height: 8),
buildEmailField(), // buildEmailField(),
], ],
), ),
); );
@ -662,6 +667,8 @@ class PersonalDetailsState extends State<PersonalDetails> {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
if (!widget.apiselectedUser) ...[ if (!widget.apiselectedUser) ...[
buildEmailField(),
Spacer(),
buildPassword(), buildPassword(),
SizedBox( SizedBox(
width: MediaQuery.of(context).size.width * 0.015, width: MediaQuery.of(context).size.width * 0.015,
@ -670,33 +677,37 @@ class PersonalDetailsState extends State<PersonalDetails> {
], ],
], ],
) )
: Column( : Row(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
Container( buildEmailField(),
width: SizedBox(width: 10),
isDesktop // Spacer(),
? MediaQuery.of(context).size.width * 0.25 // Container(
: MediaQuery.of(context).size.width * 0.8, // width:
child: Row( // isDesktop
mainAxisAlignment: MainAxisAlignment.end, // ? MediaQuery.of(context).size.width * 0.25
children: [ // : MediaQuery.of(context).size.width * 0.8,
TextButton( // child: Row(
onPressed: () => _openPopup(), // mainAxisAlignment: MainAxisAlignment.end,
style: TextButton.styleFrom( // children: [
foregroundColor: Color(0xFF114D8B), // TextButton(
textStyle: GoogleFonts.poppins( // onPressed: () => _openPopup(),
fontSize: 12, // style: TextButton.styleFrom(
fontWeight: FontWeight.w400, // foregroundColor: Color(0xFF114D8B),
), // textStyle: GoogleFonts.poppins(
), // fontSize: 12,
child: Text("Change Password"), // fontWeight: FontWeight.w400,
), // ),
], // ),
), // child: Text("Change Password"),
), // ),
// ],
SizedBox(height: 1), // ),
// ),
buildchangPswd(),
// SizedBox(height: 1),
Spacer(),
buildRole(), buildRole(),
], ],
) )
@ -704,6 +715,8 @@ class PersonalDetailsState extends State<PersonalDetails> {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
if (!widget.apiselectedUser) ...[ if (!widget.apiselectedUser) ...[
buildEmailField(),
SizedBox(height: 8),
buildPassword(), buildPassword(),
SizedBox(height: 8), SizedBox(height: 8),
buildRole(), 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() { Widget buildEmailField() {
return Column( return Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
@ -1104,6 +1161,7 @@ class PersonalDetailsState extends State<PersonalDetails> {
CustomTextFieldUserWrapper( CustomTextFieldUserWrapper(
isFocused: false, isFocused: false,
isDesktop: widget.isDesktop, isDesktop: widget.isDesktop,
width: MediaQuery.of(context).size.width * 0.12,
child: SizedBox( child: SizedBox(
height: 40, height: 40,
child: TextField( child: TextField(
@ -1165,6 +1223,7 @@ class PersonalDetailsState extends State<PersonalDetails> {
CustomTextFieldUserWrapper( CustomTextFieldUserWrapper(
isFocused: false, isFocused: false,
isDesktop: widget.isDesktop, isDesktop: widget.isDesktop,
width: MediaQuery.of(context).size.width * 0.12,
child: SizedBox( child: SizedBox(
height: 40, height: 40,
child: TextField( child: TextField(
@ -1272,7 +1331,7 @@ class PersonalDetailsState extends State<PersonalDetails> {
), ),
child: Padding( child: Padding(
// padding: const EdgeInsets.all(3.0), // padding: const EdgeInsets.all(3.0),
padding: EdgeInsets.symmetric(horizontal: 2,vertical: 3), padding: EdgeInsets.symmetric(horizontal: 2, vertical: 3),
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [