From 232ca3df46d45fe93e9fb670b2f7a5a80e71e2fa Mon Sep 17 00:00:00 2001 From: Juan Felipe Duarte <70235683+DuarteJFelipe@users.noreply.github.com> Date: Thu, 13 Apr 2023 15:23:16 -0500 Subject: [PATCH] Componente appbar y primary buttom --- lib/src/components/pop_appbar.dart | 35 ++++++++++ lib/src/components/professional_photo.dart | 74 ---------------------- lib/src/screens/city.dart | 24 ++----- lib/src/screens/login.dart | 8 ++- lib/src/screens/login_email.dart | 5 +- lib/src/screens/new_number.dart | 53 +++++----------- lib/src/screens/new_password.dart | 23 ++----- lib/src/screens/profession.dart | 24 ++----- lib/src/screens/professional_profile.dart | 24 ++----- lib/src/screens/professional_revision.dart | 24 ++----- lib/src/screens/register.dart | 5 +- lib/src/screens/request_sent.dart | 51 ++++----------- lib/src/screens/welcome.dart | 25 ++------ 13 files changed, 112 insertions(+), 263 deletions(-) create mode 100644 lib/src/components/pop_appbar.dart delete mode 100644 lib/src/components/professional_photo.dart diff --git a/lib/src/components/pop_appbar.dart b/lib/src/components/pop_appbar.dart new file mode 100644 index 0000000..338c93b --- /dev/null +++ b/lib/src/components/pop_appbar.dart @@ -0,0 +1,35 @@ +import 'package:flutter/material.dart'; + +class PopAppbar extends StatelessWidget implements PreferredSizeWidget { + final VoidCallback onPressed; + final String label; + + const PopAppbar({ + super.key, + required this.onPressed, + required this.label, + }); + + @override + Size get preferredSize => Size.fromHeight(kToolbarHeight); + + @override + Widget build(BuildContext context) { + return AppBar( + backgroundColor: Colors.white, + leading: IconButton( + icon: const Icon(Icons.arrow_back), + onPressed: onPressed, + ), + iconTheme: const IconThemeData( + color: Colors.black, + ), + title: Text( + label, + style: const TextStyle( + color: Colors.black, + ), + ), + ); + } +} diff --git a/lib/src/components/professional_photo.dart b/lib/src/components/professional_photo.dart deleted file mode 100644 index 0650689..0000000 --- a/lib/src/components/professional_photo.dart +++ /dev/null @@ -1,74 +0,0 @@ -import 'package:firebase_storage/firebase_storage.dart'; -import 'package:flutter/material.dart'; - -const double photoSize = 100; - -class ProfessionalPhoto extends StatelessWidget { - Reference? ref; - double size; - ProfessionalPhoto({super.key, required this.ref, this.size = photoSize}); - - Future downloadImage() async { - try { - if (ref != null) { - final imageData = await ref!.getData(); - if (imageData != null) { - return ClipOval( - child: Image.memory( - imageData, - width: size, - height: size, - fit: BoxFit.cover, - ), - ); - } - } - // ignore: empty_catches - } catch (e) {} - - return const DefaultProfessionalPhoto(); - } - - @override - Widget build(BuildContext context) { - return FutureBuilder( - future: downloadImage(), - builder: (BuildContext context, AsyncSnapshot snapshot) { - if (snapshot.connectionState == ConnectionState.waiting) { - // mientras la llamada asíncrona está en proceso, muestra un mensaje de carga - return const SizedBox( - width: photoSize, - height: photoSize, - child: Center( - child: CircularProgressIndicator(), - )); - } else if (snapshot.connectionState == ConnectionState.done && - snapshot.hasData) { - return snapshot.data!; - } else { - return const DefaultProfessionalPhoto(); - } - }); - } -} - -class DefaultProfessionalPhoto extends StatelessWidget { - const DefaultProfessionalPhoto({super.key}); - - @override - Widget build(BuildContext context) { - return Container( - width: photoSize, - height: photoSize, - decoration: BoxDecoration( - color: const Color(0xFF2BA4EC), - borderRadius: BorderRadius.circular(50), - ), - child: const Icon( - Icons.person, - color: Color.fromARGB(255, 255, 255, 255), - size: 55, - ), - ); - } -} diff --git a/lib/src/screens/city.dart b/lib/src/screens/city.dart index b74c141..9aef3b1 100644 --- a/lib/src/screens/city.dart +++ b/lib/src/screens/city.dart @@ -3,6 +3,8 @@ import 'package:diacritic/diacritic.dart'; import 'package:firebase_auth/firebase_auth.dart'; import 'package:flutter/material.dart'; import 'package:prosappco/src/authentication/authentication_repository.dart'; +import 'package:prosappco/src/components/pop_appbar.dart'; +import 'package:prosappco/src/components/primary_btn.dart'; class CityScreen extends StatefulWidget { const CityScreen({super.key}); @@ -132,23 +134,11 @@ class _CityScreenState extends State { return SafeArea( child: Scaffold( - appBar: AppBar( - backgroundColor: Colors.white, - leading: IconButton( - icon: Icon(Icons.arrow_back), - onPressed: () { - Navigator.pushReplacementNamed(context, '/profile'); - }, - ), - iconTheme: IconThemeData( - color: Colors.black, - ), - title: Text( - 'Seleccione su ciudad', - style: TextStyle( - color: Colors.black, - ), - )), + appBar: PopAppbar( + onPressed: () { + Navigator.pushReplacementNamed(context, '/profile'); + }, + label: 'Seleccione su ciudad'), body: Column( children: [ Padding( diff --git a/lib/src/screens/login.dart b/lib/src/screens/login.dart index a12947b..55a0411 100644 --- a/lib/src/screens/login.dart +++ b/lib/src/screens/login.dart @@ -113,9 +113,11 @@ class _LoginScreenState extends State { PhoneAuthController.instance.phoneAuthentication( completePhoneNumber.trim(), ); - Get.to(() => CodeValidationScreen( - phoneNumber: completePhoneNumber.trim(), - )); + Get.to( + () => CodeValidationScreen( + phoneNumber: completePhoneNumber.trim(), + ), + ); } }, label: 'Enviar código', diff --git a/lib/src/screens/login_email.dart b/lib/src/screens/login_email.dart index ee16023..76d9172 100644 --- a/lib/src/screens/login_email.dart +++ b/lib/src/screens/login_email.dart @@ -222,8 +222,9 @@ class _LoginEmailScreenState extends State { onPressed: () { if (_formKey.currentState!.validate()) { LoginEmailController.instance.loginUser( - controller.email.text.trim(), - controller.password.text.trim()); + controller.email.text.trim(), + controller.password.text.trim(), + ); } }, label: 'Iniciar'), diff --git a/lib/src/screens/new_number.dart b/lib/src/screens/new_number.dart index d3b2572..b1fb4a5 100644 --- a/lib/src/screens/new_number.dart +++ b/lib/src/screens/new_number.dart @@ -2,6 +2,7 @@ import 'package:firebase_auth/firebase_auth.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:intl_phone_field/intl_phone_field.dart'; +import 'package:prosappco/src/components/primary_btn.dart'; import 'package:prosappco/src/controllers/new_phone_controller.dart'; import 'package:prosappco/src/controllers/phone_auth_controller.dart'; @@ -35,16 +36,17 @@ class _NewNumberScreenState extends State { child: Scaffold( resizeToAvoidBottomInset: false, appBar: AppBar( - backgroundColor: Colors.white, - iconTheme: IconThemeData( + backgroundColor: Colors.white, + iconTheme: IconThemeData( + color: Colors.black, + ), + title: Text( + 'Añadir numero', + style: TextStyle( color: Colors.black, ), - title: Text( - 'Añadir numero', - style: TextStyle( - color: Colors.black, - ), - )), + ), + ), body: Container( padding: const EdgeInsets.symmetric(horizontal: 0, vertical: 20), margin: const EdgeInsets.only(top: 30, left: 50, right: 50), @@ -92,35 +94,12 @@ class _NewNumberScreenState extends State { Padding( padding: EdgeInsets.only(bottom: 30), child: Center( - child: ElevatedButton( - onPressed: () { - controller.updatePhoneNumber(completePhoneNumber.toString()); - // Get.to(NewNumberScreen()); - // updatePhoneNumber(completePhoneNumber, '123456'); - - // if (_formKey.currentState!.validate()) { - // // PhoneAuthController.instance.phoneAuthentication( - // // completePhoneNumber.trim(), - // // ); - // } - }, - child: Text( - 'Enviar código', - style: TextStyle( - color: Colors.white, - fontWeight: FontWeight.bold, - fontSize: 18, - ), - ), - style: ElevatedButton.styleFrom( - primary: Color(0xFF2BA4EC), // Color del botón - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(50), // Bordes redondeados - ), - elevation: 0, - minimumSize: Size(230, 60), // Tamaño mínimo del botón - ), - )), + child: PrimaryButtom( + onPressed: () { + controller + .updatePhoneNumber(completePhoneNumber.toString()); + }, + label: 'Enviar código')), ), ]), ), diff --git a/lib/src/screens/new_password.dart b/lib/src/screens/new_password.dart index 5fb71f2..928260a 100644 --- a/lib/src/screens/new_password.dart +++ b/lib/src/screens/new_password.dart @@ -1,6 +1,7 @@ import 'package:firebase_auth/firebase_auth.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; +import 'package:prosappco/src/components/pop_appbar.dart'; import 'package:prosappco/src/components/primary_btn.dart'; class NewPasswordScreen extends StatefulWidget { @@ -75,23 +76,11 @@ class _NewPasswordScreenState extends State { Widget build(BuildContext context) { return SafeArea( child: Scaffold( - appBar: AppBar( - backgroundColor: Colors.white, - leading: IconButton( - icon: const Icon(Icons.arrow_back), - onPressed: () { - Navigator.pop(context); - }, - ), - iconTheme: const IconThemeData( - color: Colors.black, - ), - title: const Text( - 'Cambie su contraseña', - style: TextStyle( - color: Colors.black, - ), - ), + appBar: PopAppbar( + onPressed: () { + Navigator.pop(context); + }, + label: 'Cambie su contraseña', ), body: Center( child: SizedBox( diff --git a/lib/src/screens/profession.dart b/lib/src/screens/profession.dart index a06bf16..4e9c5db 100644 --- a/lib/src/screens/profession.dart +++ b/lib/src/screens/profession.dart @@ -3,6 +3,7 @@ import 'package:diacritic/diacritic.dart'; import 'package:firebase_auth/firebase_auth.dart'; import 'package:flutter/material.dart'; import 'package:prosappco/src/authentication/authentication_repository.dart'; +import 'package:prosappco/src/components/pop_appbar.dart'; final CollectionReference professionsCollection = FirebaseFirestore.instance.collection('professions'); @@ -103,23 +104,12 @@ class _ProfessionScreenState extends State { return SafeArea( child: Scaffold( - appBar: AppBar( - backgroundColor: Colors.white, - leading: IconButton( - icon: const Icon(Icons.arrow_back), - onPressed: () { - Navigator.pop(context); - }, - ), - iconTheme: const IconThemeData( - color: Colors.black, - ), - title: const Text( - 'Seleccione su profesión', - style: TextStyle( - color: Colors.black, - ), - )), + appBar: PopAppbar( + onPressed: () { + Navigator.pop(context); + }, + label: 'Seleccione su profesión', + ), body: Column( children: [ Padding( diff --git a/lib/src/screens/professional_profile.dart b/lib/src/screens/professional_profile.dart index aa0740f..8a35f25 100644 --- a/lib/src/screens/professional_profile.dart +++ b/lib/src/screens/professional_profile.dart @@ -7,7 +7,7 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:prosappco/src/authentication/authentication_repository.dart'; import 'package:prosappco/src/components/photo_view.dart'; -import 'package:prosappco/src/components/professional_photo.dart'; +import 'package:prosappco/src/components/pop_appbar.dart'; import 'package:prosappco/src/controllers/info_%20professional.dart'; import 'package:prosappco/src/services/select_image_profile.dart'; @@ -458,23 +458,11 @@ class ProfessionalProfileScreenState extends State { return SafeArea( child: Scaffold( resizeToAvoidBottomInset: false, - appBar: AppBar( - backgroundColor: Colors.white, - leading: IconButton( - icon: Icon(Icons.arrow_back), - onPressed: () { - Navigator.pop(context); - }, - ), - iconTheme: IconThemeData( - color: Colors.black, - ), - title: Text( - 'Perfil profesional', - style: TextStyle( - color: Colors.black, - ), - )), + appBar: PopAppbar( + onPressed: () { + Navigator.pop(context); + }, + label: 'Perfil profesional'), body: Center( child: Column( children: [ diff --git a/lib/src/screens/professional_revision.dart b/lib/src/screens/professional_revision.dart index de71eb1..79fb8bf 100644 --- a/lib/src/screens/professional_revision.dart +++ b/lib/src/screens/professional_revision.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:prosappco/src/components/pop_appbar.dart'; class ProfessionalRevisionScreen extends StatefulWidget { const ProfessionalRevisionScreen({super.key}); @@ -14,23 +15,12 @@ class _ProfessionalRevisionScreenState Widget build(BuildContext context) { return SafeArea( child: Scaffold( - appBar: AppBar( - backgroundColor: Colors.white, - leading: IconButton( - icon: Icon(Icons.arrow_back), - onPressed: () { - Navigator.pop(context); - }, - ), - iconTheme: IconThemeData( - color: Colors.black, - ), - title: Text( - 'Perfil profesional', - style: TextStyle( - color: Colors.black, - ), - )), + appBar: PopAppbar( + onPressed: () { + Navigator.pop(context); + }, + label: 'Perfil profesional', + ), body: Container( color: Colors.white, child: Padding( diff --git a/lib/src/screens/register.dart b/lib/src/screens/register.dart index 1c0b5e4..7b40be1 100644 --- a/lib/src/screens/register.dart +++ b/lib/src/screens/register.dart @@ -229,8 +229,9 @@ class _RegisterScreenState extends State { onPressed: () { if (_formKey.currentState!.validate()) { RegisterController.instance.registerUser( - controller.email.text.trim(), - controller.password.text.trim()); + controller.email.text.trim(), + controller.password.text.trim(), + ); } }, label: 'Registrarme', diff --git a/lib/src/screens/request_sent.dart b/lib/src/screens/request_sent.dart index 6825cd4..b52f572 100644 --- a/lib/src/screens/request_sent.dart +++ b/lib/src/screens/request_sent.dart @@ -1,4 +1,6 @@ import 'package:flutter/material.dart'; +import 'package:prosappco/src/components/pop_appbar.dart'; +import 'package:prosappco/src/components/primary_btn.dart'; class RequestSentScreen extends StatelessWidget { const RequestSentScreen({super.key}); @@ -7,23 +9,12 @@ class RequestSentScreen extends StatelessWidget { Widget build(BuildContext context) { return SafeArea( child: Scaffold( - appBar: AppBar( - backgroundColor: Colors.white, - leading: IconButton( - icon: Icon(Icons.arrow_back), - onPressed: () { - Navigator.pushReplacementNamed(context, '/welcome'); - }, - ), - iconTheme: IconThemeData( - color: Colors.black, - ), - title: Text( - 'Solicitud enviada', - style: TextStyle( - color: Colors.black, - ), - )), + appBar: PopAppbar( + onPressed: () { + Navigator.pushReplacementNamed(context, '/welcome'); + }, + label: 'Solicitud enviada', + ), body: Center( child: Column( children: [ @@ -41,27 +32,11 @@ class RequestSentScreen extends StatelessWidget { style: TextStyle(color: Color(0xFF2BA4EC), fontSize: 20)), ), - ElevatedButton( - onPressed: () { - Navigator.pushReplacementNamed(context, '/welcome'); - }, - child: Text( - 'Inicio', - style: TextStyle( - color: Colors.white, - fontWeight: FontWeight.bold, - fontSize: 18, - ), - ), - style: ElevatedButton.styleFrom( - backgroundColor: const Color(0xFF2BA4EC), - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(50), - ), - elevation: 0, - minimumSize: Size(200, 60), - ), - ) + PrimaryButtom( + onPressed: () { + Navigator.pushReplacementNamed(context, '/welcome'); + }, + label: 'Inicio'), ], ), ))); diff --git a/lib/src/screens/welcome.dart b/lib/src/screens/welcome.dart index ec9f273..327837f 100644 --- a/lib/src/screens/welcome.dart +++ b/lib/src/screens/welcome.dart @@ -5,6 +5,7 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:prosappco/src/authentication/authentication_repository.dart'; import 'package:prosappco/src/components/drawer_menu.dart'; +import 'package:prosappco/src/components/primary_btn.dart'; import 'package:prosappco/src/controllers/add_name_email_city.dart'; import '../components/photo_view.dart'; @@ -144,27 +145,9 @@ class _WelcomeScreenState extends State { Padding( padding: const EdgeInsets.only(bottom: 40), child: Center( - child: ElevatedButton( - onPressed: () { - print(ModalRoute.of(context)?.settings.name); - }, - style: ElevatedButton.styleFrom( - backgroundColor: const Color(0xFF2BA4EC), - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(50), - ), - elevation: 0, - minimumSize: const Size(260, 60), - ), - child: const Text( - 'Solicitar un servicio', - style: TextStyle( - color: Colors.white, - fontWeight: FontWeight.bold, - fontSize: 18, - ), - ), - )), + child: PrimaryButtom( + onPressed: () {}, label: 'Solicitar un servicio'), + ), ), ]), ),