118 lines
4.1 KiB
Dart
118 lines
4.1 KiB
Dart
import 'package:firebase_auth/firebase_auth.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:get/get.dart';
|
|
import 'package:prosappco/src/authentication/authentication_repository.dart';
|
|
|
|
class NewPhoneController extends GetxController {
|
|
final FirebaseAuth _auth = FirebaseAuth.instance;
|
|
|
|
final newPhoneNo = TextEditingController(text: '');
|
|
final otpCode = TextEditingController(text: '');
|
|
|
|
Future<void> updatePhoneNumber(newPhoneNo) async {
|
|
final currentUser = _auth.currentUser;
|
|
|
|
if (currentUser?.phoneNumber == newPhoneNo) {
|
|
Get.snackbar(
|
|
'Ya estas registrado',
|
|
'Este es tu numero actual.',
|
|
snackPosition: SnackPosition.BOTTOM,
|
|
);
|
|
} else {
|
|
try {
|
|
final PhoneVerificationCompleted verificationCompleted =
|
|
(PhoneAuthCredential credential) async {
|
|
await currentUser?.updatePhoneNumber(credential);
|
|
Get.snackbar(
|
|
'Número de teléfono actualizado',
|
|
'El número de teléfono se ha actualizado correctamente.',
|
|
snackPosition: SnackPosition.BOTTOM,
|
|
);
|
|
};
|
|
|
|
final PhoneVerificationFailed verificationFailed =
|
|
(FirebaseAuthException e) {
|
|
Get.snackbar(
|
|
'Ingresa un numero de telefono valido',
|
|
'verifica que el campo tenga todos los caracteres o intentalo de nuevo',
|
|
snackPosition: SnackPosition.BOTTOM,
|
|
);
|
|
};
|
|
|
|
final PhoneCodeSent codeSent =
|
|
(String verificationId, [int? forceResendingToken]) {
|
|
Get.defaultDialog(
|
|
title: 'Ingrese el código de verificación',
|
|
content: Padding(
|
|
padding: const EdgeInsets.all(8.0),
|
|
child: Column(
|
|
children: [
|
|
TextField(
|
|
controller: otpCode,
|
|
decoration: InputDecoration(
|
|
labelText: 'Código de verificación',
|
|
),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
actions: [
|
|
TextButton(
|
|
onPressed: () {
|
|
Get.back();
|
|
},
|
|
child: Text('Cancelar'),
|
|
),
|
|
ElevatedButton(
|
|
onPressed: () async {
|
|
try {
|
|
final PhoneAuthCredential credential =
|
|
PhoneAuthProvider.credential(
|
|
verificationId: verificationId,
|
|
smsCode: otpCode.text,
|
|
);
|
|
await currentUser?.updatePhoneNumber(credential);
|
|
Get.back();
|
|
Get.snackbar(
|
|
'Número de teléfono actualizado',
|
|
'El número de teléfono se ha actualizado correctamente.',
|
|
snackPosition: SnackPosition.BOTTOM,
|
|
);
|
|
} catch (e) {
|
|
Get.snackbar(
|
|
'Numero ya registrado',
|
|
'El numero de telefono ingresado ya se encuentra registrado',
|
|
snackPosition: SnackPosition.BOTTOM,
|
|
);
|
|
}
|
|
},
|
|
child: Text('Actualizar'),
|
|
),
|
|
],
|
|
);
|
|
};
|
|
|
|
final PhoneCodeAutoRetrievalTimeout codeAutoRetrievalTimeout =
|
|
(String verificationId) {
|
|
// Aquí puedes hacer algo si se agota el tiempo de espera para ingresar el código de verificación automáticamente.
|
|
};
|
|
|
|
await _auth.verifyPhoneNumber(
|
|
phoneNumber: newPhoneNo,
|
|
verificationCompleted: verificationCompleted,
|
|
verificationFailed: verificationFailed,
|
|
codeSent: codeSent,
|
|
codeAutoRetrievalTimeout: codeAutoRetrievalTimeout,
|
|
);
|
|
} catch (e) {
|
|
print('Error actualizando el número de teléfono: $e');
|
|
Get.snackbar(
|
|
'Error actualizando el número de teléfono',
|
|
'Ha ocurrido un error al actualizar el número de teléfono: $e',
|
|
snackPosition: SnackPosition.BOTTOM,
|
|
);
|
|
}
|
|
}
|
|
}
|
|
}
|