import 'package:flutter/material.dart'; import 'package:frontend/api_services/api_services.dart'; class ForgotPasswordPage extends StatefulWidget { @override _ForgotPasswordPageState createState() => _ForgotPasswordPageState(); } class _ForgotPasswordPageState extends State { final TextEditingController emailController = TextEditingController(); final TextEditingController codeController = TextEditingController(); final TextEditingController passwordController = TextEditingController(); final ApiService apiService = ApiService(); bool isLoading = false; bool isCodeSent = false; // Fungsi untuk mengirim kode verifikasi void handleSendCode() async { setState(() => isLoading = true); try { await apiService.sendResetCode(email: emailController.text.trim()); // Tampilkan dialog input kode verifikasi showVerificationDialog(); } catch (e) { ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: Text(e.toString())), ); } finally { setState(() => isLoading = false); } } // Dialog untuk input kode verifikasi void showVerificationDialog() { showDialog( context: context, barrierDismissible: false, builder: (context) => AlertDialog( title: Text('Masukkan Kode Verifikasi'), content: Column( mainAxisSize: MainAxisSize.min, children: [ Text('Kode verifikasi telah dikirim ke email Anda.'), SizedBox(height: 16), TextField( controller: codeController, decoration: InputDecoration( labelText: 'Kode Verifikasi', border: OutlineInputBorder(), ), keyboardType: TextInputType.number, ), ], ), actions: [ TextButton( child: Text('Verifikasi'), onPressed: () { Navigator.pop(context); showNewPasswordDialog(); }, ), ], ), ); } // Dialog untuk input password baru void showNewPasswordDialog() { showDialog( context: context, barrierDismissible: false, builder: (context) => AlertDialog( title: Text('Reset Password'), content: Column( mainAxisSize: MainAxisSize.min, children: [ TextField( controller: passwordController, decoration: InputDecoration( labelText: 'Password Baru', border: OutlineInputBorder(), ), obscureText: true, ), ], ), actions: [ TextButton( child: Text('Reset'), onPressed: () => handleResetPassword(), ), ], ), ); } // Fungsi untuk reset password void handleResetPassword() async { setState(() => isLoading = true); try { await apiService.resetPasswordWithCode( code: codeController.text.trim(), password: passwordController.text.trim(), ); Navigator.pop(context); // Tutup dialog password // Tampilkan pesan sukses showDialog( context: context, builder: (_) => AlertDialog( title: Text('Berhasil'), content: Text('Password berhasil direset.'), actions: [ TextButton( child: Text('OK'), onPressed: () { Navigator.of(context).pop(); // tutup dialog Navigator.of(context).pop(); // kembali ke halaman login }, ), ], ), ); } catch (e) { ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: Text(e.toString())), ); } finally { setState(() => isLoading = false); } } @override Widget build(BuildContext context) { return Scaffold( backgroundColor: Color(0xFF9DC08D), appBar: AppBar( backgroundColor: Color(0xFF9DC08D), title: Text('Lupa Password'), ), body: Center( child: SingleChildScrollView( child: Padding( padding: const EdgeInsets.symmetric(horizontal: 20.0), child: Card( shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(15), ), elevation: 5, child: Padding( padding: const EdgeInsets.all(20.0), child: Column( mainAxisSize: MainAxisSize.min, children: [ Text( 'Masukkan email Anda untuk menerima kode verifikasi', textAlign: TextAlign.center, style: TextStyle(fontSize: 16), ), SizedBox(height: 20), TextField( controller: emailController, decoration: InputDecoration( labelText: 'Email', border: OutlineInputBorder( borderRadius: BorderRadius.circular(10), ), ), keyboardType: TextInputType.emailAddress, ), SizedBox(height: 20), SizedBox( width: double.infinity, height: 50, child: ElevatedButton( style: ElevatedButton.styleFrom( backgroundColor: Colors.green, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(10), ), ), onPressed: isLoading ? null : handleSendCode, child: isLoading ? CircularProgressIndicator(color: Colors.white) : Text( 'Kirim Kode Verifikasi', style: TextStyle( color: Colors.white, fontSize: 16, fontWeight: FontWeight.bold, ), ), ), ), ], ), ), ), ), ), ), ); } }