Componente appbar y primary buttom
This commit is contained in:
@@ -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,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -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(
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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'),
|
||||
|
||||
@@ -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')),
|
||||
),
|
||||
]),
|
||||
),
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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: [
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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',
|
||||
|
||||
@@ -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'),
|
||||
],
|
||||
),
|
||||
)));
|
||||
|
||||
@@ -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'),
|
||||
),
|
||||
),
|
||||
]),
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user