diff --git a/lib/main.dart b/lib/main.dart index 9863350..a7cebba 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:prosappco/src/authentication/authentication_repository.dart'; +import 'package:prosappco/src/screens/city.dart'; import 'package:prosappco/src/screens/login.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:prosappco/src/screens/login_email.dart'; @@ -33,6 +34,7 @@ class MyApp extends StatelessWidget { '/welcome': (context) => WelcomeScreen(), '/profile': (context) => ProfileScreen(), '/register': (context) => RegisterScreen(), + '/city': (context) => CityScreen(), }, onGenerateRoute: (settings) { throw Exception('Ruta desconocida: ${settings.name}'); diff --git a/lib/src/screens/city.dart b/lib/src/screens/city.dart new file mode 100644 index 0000000..5d4df77 --- /dev/null +++ b/lib/src/screens/city.dart @@ -0,0 +1,210 @@ +import 'package:diacritic/diacritic.dart'; +import 'package:flutter/material.dart'; + +class CityScreen extends StatefulWidget { + const CityScreen({super.key}); + + @override + State createState() => _CityScreenState(); +} + +List cities = [ + "Abrego", + "Aguada", + "Albania", + "Aratoca", + "Arboledas", + "Barbosa", + "Barichara", + "Barrancabermeja", + "Betulia", + "Bochalema", + "Bolivar", + "Bucaramanga", + "Bucarasica", + "Cabrera", + "Cachira", + "Cacota", + "California", + "Capitanejo", + "Carcasi", + "Cepita", + "Cerrito", + "Charala", + "Charta", + "Chima", + "Chinácota", + "Chipata", + "Chitagá", + "Cimitarra", + "Concepcion", + "Confines", + "Contratacion", + "Convención", + "Coromoro", + "Cucutilla", + "Cúcuta", + "Curiti", + "Durania", + "El Carmen", + "El Carmen de Chucuri", + "El Guacamayo", + "El Penon", + "El Playon", + "El Tarra", + "El Zulia", + "Encino", + "Enciso", + "Florian", + "Floridablanca", + "Galán", + "Gambita", + "Giron", + "Gramalote", + "Guaca", + "Guadalupe", + "Guapota", + "Guavata", + "Guepsa", + "Hacarí", + "Hato", + "Herrán", + "Jesús Maria", + "Jordan", + "La Belleza", + "La Esperanza", + "La Paz", + "La Playa", + "Landazuri", + "Labateca", + "Lebrija", + "Los Patios", + "Los Santos", + "Lourdes", + "Macaravita", + "Malaga", + "Matanza", + "Mogotes", + "Molagavita", + "Mutiscua", + "Ocaña", + "Ocamonte", + "Oiba", + "Onzaga", + "Pamplona", + "Pamplonita", + "Palmar", + "Palmas del Socorro", + "Paramo", + "Piedecuesta", + "Pinchote", + "Puente Nacional", + "Puerto Parra", + "Puerto Santander", + "Puerto Wilches", + "Ragonvalia", + "Rionegro", + "Sabana de Torres", + "Salazar", + "San Andres", + "San Benito", + "San Calixto", + "San Cayetano", + "San Gil", + "San Joaquin", + "San Jose de Miranda", + "San Miguel", + "San Vicente de Chucuri", + "Santa Barbara", + "Santa Helena del Opon", + "Santiago", + "Sardinata", + "Silos", + "Simacota", + "Socorro", + "Surata", + "Suaita", + "Sucre", + "Tibú", + "Tona", + "Toledo", + "Valle de San Jose", + "Velez", + "Vetas", + "Villa Caro", + "Villa del Rosario", + "Zapatoca", + "Villanueva", +]; + +class City { + final String name; + + City({required this.name}); +} + +List citiesList = cities.map((city) => City(name: city)).toList(); + +class _CityScreenState extends State { + List filteredCities = citiesList; + TextEditingController searchController = TextEditingController(); + + @override + void initState() { + super.initState(); + searchController.addListener(() { + setState(() { + filteredCities = citiesList + .where((city) => removeDiacritics(city.name).toLowerCase().contains( + removeDiacritics(searchController.text.toLowerCase()))) + .toList(); + }); + }); + } + + @override + Widget build(BuildContext context) { + return SafeArea( + child: Scaffold( + appBar: AppBar( + backgroundColor: Colors.white, + iconTheme: IconThemeData( + color: Colors.black, + ), + title: Text( + 'Seleccione su ciudad', + style: TextStyle( + color: Colors.black, + ), + )), + body: Column( + children: [ + Padding( + padding: EdgeInsets.only(left: 10, right: 10, top: 10), + child: TextField( + controller: searchController, + decoration: InputDecoration( + hintText: 'Buscar ciudad', + prefixIcon: Icon(Icons.near_me), + ), + ), + ), + Expanded( + child: ListView.builder( + itemCount: filteredCities.length, + itemBuilder: (BuildContext context, int index) { + return ListTile( + title: Text(filteredCities[index].name), + onTap: () { + print(filteredCities[index].name); + }, + ); + }, + ), + ), + ], + ), + ), + ); + } +} diff --git a/lib/src/screens/profile.dart b/lib/src/screens/profile.dart index 2882246..fb8ed16 100644 --- a/lib/src/screens/profile.dart +++ b/lib/src/screens/profile.dart @@ -307,10 +307,17 @@ class _ProfileScreenState extends State { 20.0), // Agrega espacio vertical entre los TextFormFields TextFormField( controller: controller.city, + readOnly: true, + onTap: () { + Navigator.pushNamed(context, '/city'); + }, decoration: InputDecoration( - prefixIcon: Icon(Icons.near_me), - hintText: 'Ciudad'), + prefixIcon: Icon(Icons.near_me), + suffixIcon: Icon(Icons.arrow_drop_down), + hintText: 'Ciudad', + ), ), + SizedBox( height: 20.0), // Agrega espacio vertical entre los TextFormFields diff --git a/pubspec.lock b/pubspec.lock index d2f44e2..1841910 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -81,6 +81,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.5" + diacritic: + dependency: "direct main" + description: + name: diacritic + sha256: c09a420e737dc036122121fea9f774767e95068f34a17894ee9db30c5bda3075 + url: "https://pub.dev" + source: hosted + version: "0.1.3" fake_async: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 95a1cab..aed8155 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -46,6 +46,7 @@ dependencies: flutter_otp_text_field: ^1.1.1 intl_phone_field: ^3.1.0 cloud_firestore: ^4.5.0 + diacritic: ^0.1.3 dev_dependencies: flutter_test: