Nueva contraseña

This commit is contained in:
Juan Felipe Duarte
2023-04-13 11:26:31 -05:00
parent a57f5580eb
commit 2eea2d6502
5 changed files with 172 additions and 7 deletions
+3 -1
View File
@@ -6,6 +6,7 @@ import 'package:prosappco/src/screens/login.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:prosappco/src/screens/login_email.dart';
import 'package:prosappco/src/screens/new_number.dart';
import 'package:prosappco/src/screens/new_password.dart';
import 'package:prosappco/src/screens/profession.dart';
import 'package:prosappco/src/screens/professional_profile.dart';
import 'package:prosappco/src/screens/professional_revision.dart';
@@ -44,7 +45,8 @@ class MyApp extends StatelessWidget {
'/newNumber': (context) => NewNumberScreen(),
'/profesionalRevision': (context) => ProfessionalRevisionScreen(),
'/profesionalProfile': (context) => ProfessionalProfileScreen(),
'/solicitudEnviada': (context) => RequestSentScreen()
'/solicitudEnviada': (context) => RequestSentScreen(),
'/nuevaPassword': (context) => NewPasswordScreen()
},
onGenerateRoute: (settings) {
throw Exception('Ruta desconocida: ${settings.name}');
+2 -2
View File
@@ -202,8 +202,8 @@ class _LoginEmailScreenState extends State<LoginEmailScreen> {
suffixIcon: IconButton(
icon: Icon(
_obscureText
? Icons.visibility_off
: Icons.visibility,
? Icons.visibility
: Icons.visibility_off,
color: Colors.grey,
),
onPressed: () {
+159
View File
@@ -0,0 +1,159 @@
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:prosappco/src/components/primary_btn.dart';
class NewPasswordScreen extends StatefulWidget {
NewPasswordScreen({super.key});
@override
State<NewPasswordScreen> createState() => _NewPasswordScreenState();
}
class _NewPasswordScreenState extends State<NewPasswordScreen> {
final _currentPasswordController = TextEditingController();
final _newPasswordController = TextEditingController();
bool _obscureText = true;
bool _obscureText2 = true;
final FirebaseAuth _auth = FirebaseAuth.instance;
Future<void> updatePassword(
String currentPassword, String newPassword) async {
final User user = _auth.currentUser!;
final credential = EmailAuthProvider.credential(
email: user.email!,
password: currentPassword,
);
try {
if (newPassword == currentPassword) {
Get.snackbar(
'Misma contraseña',
'La nueva contraseña debe ser diferente a la contraseña actual.',
snackPosition: SnackPosition.BOTTOM,
);
return;
} else if (newPassword.isEmpty) {
Get.snackbar(
'Ingrese una contraseña valida',
'La nueva contraseña no puede estar vacia.',
snackPosition: SnackPosition.BOTTOM,
);
return;
} else {
await user.reauthenticateWithCredential(credential);
try {
await user.updatePassword(newPassword);
// Muestra un mensaje de éxito
Get.snackbar(
'Contraseña actualizada',
'La contraseña ha sido actualizada correctamente.',
snackPosition: SnackPosition.BOTTOM,
);
} catch (e) {
print("Error al verificar la contraseña actual: $e");
}
}
} catch (e) {
Get.snackbar(
'Contraseña incorrecta',
'Error al actualizar la contraseña asegurese de ingresar bien la contraseña actual.',
snackPosition: SnackPosition.BOTTOM,
);
return;
}
}
@override
void initState() {
super.initState();
}
@override
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,
),
),
),
body: Center(
child: SizedBox(
width: 300,
child: Padding(
padding: const EdgeInsets.only(top: 100),
child: Column(
children: [
TextFormField(
controller: _currentPasswordController,
obscureText: _obscureText,
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;
});
},
),
hintText: 'Contraseña (Actual)'),
),
const SizedBox(height: 40.0),
TextFormField(
controller: _newPasswordController,
obscureText: _obscureText2,
decoration: InputDecoration(
prefixIcon: const Icon(Icons.lock_outline),
suffixIcon: IconButton(
icon: Icon(
_obscureText2
? Icons.visibility
: Icons.visibility_off,
color: Colors.grey,
),
onPressed: () {
setState(() {
_obscureText2 = !_obscureText2;
});
},
),
hintText: 'Contraseña (Nueva)'),
),
const SizedBox(height: 80.0),
PrimaryButtom(
onPressed: () {
updatePassword(_currentPasswordController.text.trim(),
_newPasswordController.text.trim());
},
label: 'Actualizar contraseña'),
],
),
),
),
),
),
);
}
}
+6 -2
View File
@@ -404,6 +404,10 @@ class _ProfileScreenState extends State<ProfileScreen> {
20.0), // Agrega espacio vertical entre los TextFormFields
_email != null
? TextFormField(
onTap: () {
Navigator.pushNamed(
context, '/nuevaPassword');
},
readOnly: true,
controller: _emailController,
decoration: const InputDecoration(
@@ -427,8 +431,8 @@ class _ProfileScreenState extends State<ProfileScreen> {
suffixIcon: IconButton(
icon: Icon(
_obscureText
? Icons.visibility_off
: Icons.visibility,
? Icons.visibility
: Icons.visibility_off,
color: Colors.grey,
),
onPressed: () {
+2 -2
View File
@@ -207,8 +207,8 @@ class _RegisterScreenState extends State<RegisterScreen> {
suffixIcon: IconButton(
icon: Icon(
_obscureText
? Icons.visibility_off
: Icons.visibility,
? Icons.visibility
: Icons.visibility_off,
color: Colors.grey,
),
onPressed: () {