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 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, ); } } } }