From d357d543d91e13a71dafef9668c695d2f81e8eed Mon Sep 17 00:00:00 2001 From: Juan Felipe Duarte <70235683+DuarteJFelipe@users.noreply.github.com> Date: Sat, 17 Jun 2023 10:15:35 -0500 Subject: [PATCH] formularios fondo azul --- lib/src/screens/profile_web.dart | 362 +++++++++++---------- lib/src/screens/service.dart | 525 ++++++++++++++++--------------- 2 files changed, 443 insertions(+), 444 deletions(-) diff --git a/lib/src/screens/profile_web.dart b/lib/src/screens/profile_web.dart index 6258cf5..0cde6eb 100644 --- a/lib/src/screens/profile_web.dart +++ b/lib/src/screens/profile_web.dart @@ -249,209 +249,205 @@ class _ProfileWebScreenState extends State { String city = _ciudad.toString(); return Scaffold( + backgroundColor: const Color(0xFFD6F4FF), appBar: PopAppbar( onPressed: () { Navigator.pop(context); }, label: 'Perfil'), - body: SingleChildScrollView( - reverse: true, - child: Center( - child: Column( - children: [ - Container( - padding: const EdgeInsets.only(top: 20), - child: (selectedImagInBytes != null) - ? LocalPhotoWeb(file: selectedImagInBytes) - : ReferencePhotoWeb(ref: storage.ref().child(_photo)), - ), - // Padding( - // padding: const EdgeInsets.symmetric(vertical: 10), - // child: ElevatedButton.icon( - // onPressed: () { - // _selectFile(true); - // }, - // icon: const Icon(Icons.image), - // label: const Text('Elige una imagen'), - // ), - // ), - Container( - width: 300, - child: Form( - key: _formKey, - child: Column( - children: [ - TextFormField( - controller: _nameController, - maxLength: 50, - validator: (value) { - if (value == null || value.isEmpty) { - return 'Porfavor ingrese un nombre.'; - } - if (value.length < 5) { - return 'Debe tener al menos 5 caracteres.'; - } - return null; - }, - decoration: const InputDecoration( - prefixIcon: Icon(Icons.person_outline), - hintText: 'Nombre (Obligatorio)', - ), + body: Center( + child: SizedBox( + width: 300, + height: 550, + child: Card( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10), + ), + color: Colors.white, + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 20.0), + child: Form( + key: _formKey, + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Container( + padding: const EdgeInsets.only(top: 20, bottom: 20), + child: (selectedImagInBytes != null) + ? LocalPhotoWeb(file: selectedImagInBytes) + : ReferencePhotoWeb(ref: storage.ref().child(_photo)), + ), + TextFormField( + controller: _nameController, + maxLength: 50, + validator: (value) { + if (value == null || value.isEmpty) { + return 'Porfavor ingrese un nombre.'; + } + if (value.length < 5) { + return 'Debe tener al menos 5 caracteres.'; + } + return null; + }, + decoration: const InputDecoration( + prefixIcon: Icon(Icons.person_outline), + hintText: 'Nombre (Obligatorio)', ), - _email != null - ? TextFormField( - onTap: () { - Navigator.push(context, CupertinoPageRoute( - builder: (BuildContext context) { - return NewPasswordScreen(); - }, - )); - }, - readOnly: true, - controller: _emailController, - decoration: const InputDecoration( - prefixIcon: Icon(Icons.email_outlined), - hintText: 'Email (Obligatorio)', - ), - ) - : TextFormField( - controller: _emailController, - validator: (String? value) { - if (value == null || value.isEmpty) { - return 'Por favor ingrese un email'; - } - final RegExp emailRegExp = - RegExp(r'^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$'); - if (!emailRegExp.hasMatch(value)) { - return 'Por favor ingrese un email válido'; - } - return null; - }, - decoration: const InputDecoration( - prefixIcon: Icon(Icons.email_outlined), - hintText: 'Email (Obligatorio)', - ), + ), + _email != null + ? TextFormField( + onTap: () { + Navigator.push(context, CupertinoPageRoute( + builder: (BuildContext context) { + return NewPasswordScreen(); + }, + )); + }, + readOnly: true, + controller: _emailController, + decoration: const InputDecoration( + prefixIcon: Icon(Icons.email_outlined), + hintText: 'Email (Obligatorio)', ), - const SizedBox(height: 20.0), - _email != null - ? const SizedBox.shrink() - : TextFormField( - controller: _passwordController, - obscureText: _obscureText, - validator: (value) { - if (value == null || value.isEmpty) { - return 'Porfavor ingrese una contraseña.'; - } - if (value.length < 5) { - return 'Debe tener al menos 5 caracteres.'; - } - return null; - }, - decoration: InputDecoration( - prefixIcon: const Icon(Icons.lock_outline), - suffixIcon: IconButton( - icon: Icon( - _obscureText - ? Icons.visibility - : Icons.visibility_off, - color: Colors.grey, - ), - onPressed: () { - setState(() { - _obscureText = !_obscureText; - }); - }, + ) + : TextFormField( + controller: _emailController, + validator: (String? value) { + if (value == null || value.isEmpty) { + return 'Por favor ingrese un email'; + } + final RegExp emailRegExp = + RegExp(r'^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$'); + if (!emailRegExp.hasMatch(value)) { + return 'Por favor ingrese un email válido'; + } + return null; + }, + decoration: const InputDecoration( + prefixIcon: Icon(Icons.email_outlined), + hintText: 'Email (Obligatorio)', + ), + ), + const SizedBox(height: 20.0), + _email != null + ? const SizedBox.shrink() + : TextFormField( + controller: _passwordController, + obscureText: _obscureText, + validator: (value) { + if (value == null || value.isEmpty) { + return 'Porfavor ingrese una contraseña.'; + } + if (value.length < 5) { + return 'Debe tener al menos 5 caracteres.'; + } + return null; + }, + decoration: InputDecoration( + prefixIcon: const Icon(Icons.lock_outline), + suffixIcon: IconButton( + icon: Icon( + _obscureText + ? Icons.visibility + : Icons.visibility_off, + color: Colors.grey, ), - hintText: 'Contraseña (Obligatorio)', + onPressed: () { + setState(() { + _obscureText = !_obscureText; + }); + }, ), + hintText: 'Contraseña (Obligatorio)', ), - _email != null - ? const SizedBox.shrink() - : const SizedBox(height: 20.0), - TextFormField( - readOnly: true, - onTap: () async { - final String? ciudad = await Navigator.push( - context, - CupertinoPageRoute( - builder: (BuildContext context) { - return const CityScreen(); - }, - ), - ) as String?; + ), + _email != null + ? const SizedBox.shrink() + : const SizedBox(height: 20.0), + TextFormField( + readOnly: true, + onTap: () async { + final String? ciudad = await Navigator.push( + context, + CupertinoPageRoute( + builder: (BuildContext context) { + return const CityScreen(); + }, + ), + ) as String?; - if (ciudad != null) { - setState(() { - _ciudad = ciudad; + if (ciudad != null) { + setState(() { + _ciudad = ciudad; + }); + } + }, + decoration: InputDecoration( + prefixIcon: const Icon(Icons.near_me), + suffixIcon: const Icon(Icons.arrow_drop_down), + hintStyle: city == '' + ? const TextStyle() + : const TextStyle(color: Colors.black87), + hintText: city == '' ? 'Ciudad' : city, + ), + ), + const SizedBox(height: 20.0), + TextFormField( + controller: _phoneNumberController, + readOnly: true, + onTap: () { + Navigator.of(context).push( + CupertinoPageRoute( + builder: (BuildContext context) { + return const NewNumberScreen(); + }, + ), + ); + }, + decoration: const InputDecoration( + prefixIcon: Icon(Icons.phone_android), + suffixIcon: Icon(Icons.edit_outlined), + hintText: '+57'), + ), + Container( + alignment: Alignment.bottomCenter, + margin: const EdgeInsets.only(top: 50), + padding: const EdgeInsets.only(bottom: 30), + child: ElevatedButton( + onPressed: () async { + if (_formKey.currentState!.validate()) { + await updateInfo().whenComplete(() { + Get.snackbar( + 'Perfil', + 'Información actualizada correctamente.', + snackPosition: SnackPosition.TOP, + ); }); } }, - decoration: InputDecoration( - prefixIcon: const Icon(Icons.near_me), - suffixIcon: const Icon(Icons.arrow_drop_down), - hintStyle: city == '' - ? const TextStyle() - : const TextStyle(color: Colors.black87), - hintText: city == '' ? 'Ciudad' : city, - ), - ), - const SizedBox(height: 20.0), - TextFormField( - controller: _phoneNumberController, - readOnly: true, - onTap: () { - Navigator.of(context).push( - CupertinoPageRoute( - builder: (BuildContext context) { - return const NewNumberScreen(); - }, - ), - ); - }, - decoration: const InputDecoration( - prefixIcon: Icon(Icons.phone_android), - suffixIcon: Icon(Icons.edit_outlined), - hintText: '+57'), - ), - Container( - alignment: Alignment.bottomCenter, - margin: const EdgeInsets.only(top: 50), - padding: const EdgeInsets.only(bottom: 30), - child: ElevatedButton( - onPressed: () async { - if (_formKey.currentState!.validate()) { - await updateInfo().whenComplete(() { - Get.snackbar( - 'Perfil', - 'Información actualizada correctamente.', - snackPosition: SnackPosition.TOP, - ); - }); - } - }, - style: ElevatedButton.styleFrom( - backgroundColor: const Color(0xFF2BA4EC), - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(50), - ), - elevation: 0, - minimumSize: const Size(200, 50), + style: ElevatedButton.styleFrom( + backgroundColor: const Color(0xFF2BA4EC), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(50), ), - child: const Text( - 'Guardar', - style: TextStyle( - color: Colors.white, - fontWeight: FontWeight.bold, - fontSize: 17, - ), + elevation: 0, + minimumSize: const Size(200, 50), + ), + child: const Text( + 'Guardar', + style: TextStyle( + color: Colors.white, + fontWeight: FontWeight.bold, + fontSize: 17, ), ), ), - ], - ), + ), + ], ), ), - ], + ), ), ), ), diff --git a/lib/src/screens/service.dart b/lib/src/screens/service.dart index 115feef..b0b0027 100644 --- a/lib/src/screens/service.dart +++ b/lib/src/screens/service.dart @@ -210,272 +210,275 @@ class _ServiceScreenState extends State { Widget build(BuildContext context) { if (kIsWeb) { return Scaffold( + backgroundColor: const Color(0xFFD6F4FF), drawer: DrawerMenu(), appBar: AppBar( - elevation: 0, - title: Row( - children: [ - Container( - padding: const EdgeInsets.only(right: 10), - decoration: const BoxDecoration( - border: Border( - right: BorderSide( - color: Colors.white, - width: 1.0, + elevation: 0, + title: const Text( + 'Prosapp', + style: TextStyle( + color: Colors.white, + fontSize: 20, + ), + )), + body: Center( + child: SizedBox( + width: 300, + height: 470, + child: Card( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10), + ), + color: Colors.white, + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 20.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + TextFormField( + controller: _ubicationController, + readOnly: true, + onTap: () async { + final List datos = await Navigator.push( + context, + CupertinoPageRoute( + builder: (BuildContext context) { + return const UbicacionScreen(); + }, + ), + ); + + if (datos.length == 3) { + final formattedAddress = datos[0]; + final lat = datos[1]; + final lng = datos[2]; + + setState(() { + _ubicationController.text = formattedAddress; + latUser = lat; + lngUser = lng; + }); + } + }, + decoration: const InputDecoration( + hintText: 'Escribe tu ubicación', + prefixIcon: Icon(Icons.location_on), + ), ), - ), - ), - child: const Text( - 'Prosapp', + const SizedBox(height: 20.0), + TextFormField( + controller: _profesionalController, + readOnly: true, + onTap: () async { + final dynamic datos = await Navigator.push( + context, + CupertinoPageRoute( + builder: (BuildContext context) { + return ProfessionalScreen( + profession: _serviceTypeController.text, + ); + }, + ), + ); + if (datos != null) { + Professional? profesional = datos[0]; + ubicacion = datos[1]; + + if (profesional != null) { + setState(() { + _profesionalController.text = + profesional.name.toString(); + professionalId = profesional.id; + professionalTarifa = profesional.tarifa ?? 0; + professionalUbicacion = profesional.ubicacion; + professionalAddress = _ubicationController.text; + + if (ubicacion == 'sitio') { + professionalAddress = profesional.realAddress; + _ubicationController.text = + profesional.realAddress; + latUser = profesional.latitude; + lngUser = profesional.longitude; + } + }); + } + } + }, + decoration: const InputDecoration( + prefixIcon: Icon(Icons.assignment_ind_rounded), + suffixIcon: Icon(Icons.arrow_drop_down), + hintText: 'Seleccionar profesional'), + ), + const SizedBox(height: 20.0), + TextFormField( + onTap: () { + if (_profesionalController.text.isNotEmpty) { + _selectDate(context); + } else { + final snackBar = SnackBar( + backgroundColor: Colors.blue, + content: const Text( + 'Selecciona un profesional', + style: TextStyle( + color: Colors.white, + fontWeight: FontWeight.bold, + ), + ), + elevation: 8.0, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10.0), + ), + ); + + ScaffoldMessenger.of(context).showSnackBar(snackBar); + } + }, + readOnly: true, + decoration: InputDecoration( + prefixIcon: const Icon(Icons.calendar_month), + suffixIcon: _selectedDate == null + ? const Icon(Icons.arrow_drop_down) + : null, + hintText: 'Fecha', + ), + controller: TextEditingController( + text: _selectedDate == null + ? '' + : formatter.format(_selectedDate!)), + ), + const SizedBox(height: 20.0), + TextFormField( + onTap: () { + if (_profesionalController.text.isNotEmpty) { + _selectTime(context); + } else { + final snackBar = SnackBar( + backgroundColor: Colors.blue, + content: const Text( + 'Selecciona un profesional', + style: TextStyle( + color: Colors.white, + fontWeight: FontWeight.bold, + ), + ), + elevation: 8.0, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10.0), + ), + ); + + ScaffoldMessenger.of(context).showSnackBar(snackBar); + } + }, + readOnly: true, + decoration: const InputDecoration( + prefixIcon: Icon(Icons.access_time), + suffixIcon: Icon(Icons.arrow_drop_down), + hintText: 'Hora', + ), + controller: TextEditingController( + text: _selectedTime == null + ? '' + : ' ${_selectedTime!.format(context)}'), + ), + const SizedBox(height: 20.0), + TextFormField( + controller: _observacionController, + decoration: const InputDecoration( + prefixIcon: Icon(Icons.message_outlined), + hintText: 'Observaciones'), + ), + const SizedBox(height: 40.0), + ElevatedButton( + onPressed: () { + if (user?.name == null || + user?.name == '' || + user?.phoneNumber == null || + user?.phoneNumber == '') { + Navigator.push( + context, + CupertinoPageRoute( + builder: (BuildContext context) { + return const ProfileScreen(); + }, + ), + ); + } else { + try { + final DateTime combinedDate = DateTime( + _selectedDate!.year, + _selectedDate!.month, + _selectedDate!.day, + _selectedTime!.hour, + _selectedTime!.minute, + ); + + DateTime time2 = + combinedDate.add(const Duration(hours: 2)); + + UserModel.getUser(uid.toString()).then((value) { + eventoService + .createEvent( + value.name, + _observacionController.text, + '$_selectedDate', + '$combinedDate', + '$time2', + professionalId, + ubicacion, + professionalAddress, + latUser, + lngUser, + 'pendiente', + professionalTarifa == 0 + ? 0 + : professionalTarifa, + false, + false, + ) + .then((value) { + Navigator.pushReplacement( + context, + CupertinoPageRoute( + builder: (BuildContext context) { + return ServiceAfterScreen( + eventoId: value, + ); + }, + ), + ); + }); + }); + } catch (e) { + Get.snackbar( + 'Llena todos los campos', + 'Asegurate de llenar todos los campos.', + snackPosition: SnackPosition.BOTTOM, + ); + } + } + }, + style: ElevatedButton.styleFrom( + backgroundColor: const Color(0xFF2BA4EC), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(50), + ), + elevation: 0, + minimumSize: const Size(230, 50), + ), + child: const Text( + 'Solicitar servicio', + style: TextStyle( + color: Colors.white, + fontWeight: FontWeight.bold, + fontSize: 18, + ), + ), + ), + ], ), ), - ], - ), // Texto del título - ), - body: Center( - child: Container( - width: 300, - child: Column( - children: [ - const SizedBox(height: 20.0), - TextFormField( - controller: _ubicationController, - readOnly: true, - onTap: () async { - final List datos = await Navigator.push( - context, - CupertinoPageRoute( - builder: (BuildContext context) { - return const UbicacionScreen(); - }, - ), - ); - - if (datos.length == 3) { - final formattedAddress = datos[0]; - final lat = datos[1]; - final lng = datos[2]; - - setState(() { - _ubicationController.text = formattedAddress; - latUser = lat; - lngUser = lng; - }); - } - }, - decoration: const InputDecoration( - hintText: 'Escribe tu ubicación', - prefixIcon: Icon(Icons.location_on), - ), - ), - const SizedBox(height: 20.0), - TextFormField( - controller: _profesionalController, - readOnly: true, - onTap: () async { - final dynamic datos = await Navigator.push( - context, - CupertinoPageRoute( - builder: (BuildContext context) { - return ProfessionalScreen( - profession: _serviceTypeController.text, - ); - }, - ), - ); - if (datos != null) { - Professional? profesional = datos[0]; - ubicacion = datos[1]; - - if (profesional != null) { - setState(() { - _profesionalController.text = - profesional.name.toString(); - professionalId = profesional.id; - professionalTarifa = profesional.tarifa ?? 0; - professionalUbicacion = profesional.ubicacion; - professionalAddress = _ubicationController.text; - - if (ubicacion == 'sitio') { - professionalAddress = profesional.realAddress; - _ubicationController.text = profesional.realAddress; - latUser = profesional.latitude; - lngUser = profesional.longitude; - } - }); - } - } - }, - decoration: const InputDecoration( - prefixIcon: Icon(Icons.assignment_ind_rounded), - suffixIcon: Icon(Icons.arrow_drop_down), - hintText: 'Seleccionar profesional'), - ), - const SizedBox(height: 20.0), - TextFormField( - onTap: () { - if (_profesionalController.text.isNotEmpty) { - _selectDate(context); - } else { - final snackBar = SnackBar( - backgroundColor: Colors.blue, - content: const Text( - 'Selecciona un profesional', - style: TextStyle( - color: Colors.white, - fontWeight: FontWeight.bold, - ), - ), - elevation: 8.0, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(10.0), - ), - ); - - ScaffoldMessenger.of(context).showSnackBar(snackBar); - } - }, - readOnly: true, - decoration: InputDecoration( - prefixIcon: const Icon(Icons.calendar_month), - suffixIcon: _selectedDate == null - ? const Icon(Icons.arrow_drop_down) - : null, - hintText: 'Fecha', - ), - controller: TextEditingController( - text: _selectedDate == null - ? '' - : formatter.format(_selectedDate!)), - ), - const SizedBox(height: 20.0), - TextFormField( - onTap: () { - if (_profesionalController.text.isNotEmpty) { - _selectTime(context); - } else { - final snackBar = SnackBar( - backgroundColor: Colors.blue, - content: const Text( - 'Selecciona un profesional', - style: TextStyle( - color: Colors.white, - fontWeight: FontWeight.bold, - ), - ), - elevation: 8.0, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(10.0), - ), - ); - - ScaffoldMessenger.of(context).showSnackBar(snackBar); - } - }, - readOnly: true, - decoration: const InputDecoration( - prefixIcon: Icon(Icons.access_time), - suffixIcon: Icon(Icons.arrow_drop_down), - hintText: 'Hora', - ), - controller: TextEditingController( - text: _selectedTime == null - ? '' - : ' ${_selectedTime!.format(context)}'), - ), - const SizedBox(height: 20.0), - TextFormField( - controller: _observacionController, - decoration: const InputDecoration( - prefixIcon: Icon(Icons.message_outlined), - hintText: 'Observaciones'), - ), - const SizedBox(height: 20.0), - ElevatedButton( - onPressed: () { - if (user?.name == null || - user?.name == '' || - user?.phoneNumber == null || - user?.phoneNumber == '') { - Navigator.push( - context, - CupertinoPageRoute( - builder: (BuildContext context) { - return const ProfileScreen(); - }, - ), - ); - } else { - try { - final DateTime combinedDate = DateTime( - _selectedDate!.year, - _selectedDate!.month, - _selectedDate!.day, - _selectedTime!.hour, - _selectedTime!.minute, - ); - - DateTime time2 = - combinedDate.add(const Duration(hours: 2)); - - UserModel.getUser(uid.toString()).then((value) { - eventoService - .createEvent( - value.name, - _observacionController.text, - '$_selectedDate', - '$combinedDate', - '$time2', - professionalId, - ubicacion, - professionalAddress, - latUser, - lngUser, - 'pendiente', - professionalTarifa == 0 ? 0 : professionalTarifa, - false, - false, - ) - .then((value) { - Navigator.pushReplacement( - context, - CupertinoPageRoute( - builder: (BuildContext context) { - return ServiceAfterScreen( - eventoId: value, - ); - }, - ), - ); - }); - }); - } catch (e) { - Get.snackbar( - 'Llena todos los campos', - 'Asegurate de llenar todos los campos.', - snackPosition: SnackPosition.BOTTOM, - ); - } - } - }, - style: ElevatedButton.styleFrom( - backgroundColor: const Color(0xFF2BA4EC), - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(50), - ), - elevation: 0, - minimumSize: const Size(230, 50), - ), - child: const Text( - 'Solicitar servicio', - style: TextStyle( - color: Colors.white, - fontWeight: FontWeight.bold, - fontSize: 18, - ), - ), - ), - ], ), ), ),