Componente appbar y primary buttom

This commit is contained in:
Juan Felipe Duarte
2023-04-13 15:23:16 -05:00
parent 2eea2d6502
commit 232ca3df46
13 changed files with 112 additions and 263 deletions
+35
View File
@@ -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,
),
),
);
}
}
@@ -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<Widget> 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<Widget>(
future: downloadImage(),
builder: (BuildContext context, AsyncSnapshot<Widget> 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,
),
);
}
}
+7 -17
View File
@@ -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<CityScreen> {
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(
+5 -3
View File
@@ -113,9 +113,11 @@ class _LoginScreenState extends State<LoginScreen> {
PhoneAuthController.instance.phoneAuthentication(
completePhoneNumber.trim(),
);
Get.to(() => CodeValidationScreen(
phoneNumber: completePhoneNumber.trim(),
));
Get.to(
() => CodeValidationScreen(
phoneNumber: completePhoneNumber.trim(),
),
);
}
},
label: 'Enviar código',
+3 -2
View File
@@ -222,8 +222,9 @@ class _LoginEmailScreenState extends State<LoginEmailScreen> {
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'),
+16 -37
View File
@@ -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<NewNumberScreen> {
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<NewNumberScreen> {
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')),
),
]),
),
+6 -17
View File
@@ -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<NewPasswordScreen> {
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(
+7 -17
View File
@@ -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<ProfessionScreen> {
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(
+6 -18
View File
@@ -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<ProfessionalProfileScreen> {
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: [
+7 -17
View File
@@ -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(
+3 -2
View File
@@ -229,8 +229,9 @@ class _RegisterScreenState extends State<RegisterScreen> {
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',
+13 -38
View File
@@ -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'),
],
),
)));
+4 -21
View File
@@ -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<WelcomeScreen> {
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'),
),
),
]),
),