import 'package:firebase_auth/firebase_auth.dart'; import 'package:flutter/material.dart'; import 'edit_email.dart'; import 'edit_name.dart'; import '../widgets/appbar_widget.dart'; const Color cColor = Color.fromARGB(255, 58, 168, 50); class ConfirmPasswordPage extends StatefulWidget { const ConfirmPasswordPage({Key? key}) : super(key: key); @override _ConfirmPasswordPageState createState() => _ConfirmPasswordPageState(); } class _ConfirmPasswordPageState extends State { final _formKey = GlobalKey(); final passwordController = TextEditingController(); bool isValid = true; bool _obscureText = true; @override void initState() { super.initState(); passwordController.addListener(() {}); } @override void dispose() { passwordController.dispose(); super.dispose(); } void clearForm() { passwordController.clear(); } @override Widget build(BuildContext context) { return Scaffold( appBar: buildAppBar(context), body: Form( key: _formKey, child: Column( crossAxisAlignment: CrossAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.start, children: [ const SizedBox( width: 320, child: Text( 'To change your email, please enter your password:', style: TextStyle(fontSize: 22, fontWeight: FontWeight.bold), textAlign: TextAlign.left, ), ), Padding( padding: const EdgeInsets.only(top: 40), child: SizedBox( height: 100, width: 320, child: TextFormField( keyboardType: TextInputType.text, obscureText: _obscureText, // Handles Form Validation validator: (value) { if (value == null || value.isEmpty) { return 'Please enter your password'; } if (value.length < 8) { return 'Password must be at least 8 characters long'; } return null; }, decoration: InputDecoration( labelText: 'Password', suffixIcon: IconButton( icon: Icon( _obscureText ? Icons.visibility : Icons.visibility_off, color: Colors.grey, ), onPressed: () { setState(() { _obscureText = !_obscureText; }); }, ), ), controller: passwordController, ), ), ), Padding( padding: const EdgeInsets.only(top: 150), child: Align( alignment: Alignment.bottomCenter, child: SizedBox( width: 320, height: 50, child: ElevatedButton( onPressed: () async { setState(() { isValid = _formKey.currentState!.validate(); }); if (isValid) { final String password = passwordController.text.trim(); try { // Reauthenticate the user with their password final user = FirebaseAuth.instance.currentUser; final credential = EmailAuthProvider.credential( email: user!.email!, password: password); await user.reauthenticateWithCredential(credential); // Navigate to the page to change the email // ignore: use_build_context_synchronously Navigator.push( context, MaterialPageRoute( builder: ((context) => const EditEmailFormPage()), ), ); } on FirebaseAuthException catch (e) { // Handle the error ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text(e.message!), duration: const Duration(seconds: 3), ), ); } } }, style: ButtonStyle( backgroundColor: MaterialStateProperty.all(cColor), ), child: const Text( 'Authenticate', style: TextStyle(fontSize: 15), ), ), ), ), ) ], ), ), ); } }