import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:http/http.dart' as http; import '../config.dart'; // baseUrl disimpan di file ini class ForgotPasswordScreen extends StatefulWidget { const ForgotPasswordScreen({Key? key}) : super(key: key); @override State createState() => _ForgotPasswordScreenState(); } class _ForgotPasswordScreenState extends State { final _formKey = GlobalKey(); final _nisController = TextEditingController(); final _newPassController = TextEditingController(); final _confirmPassController = TextEditingController(); bool _loading = false; Future _resetPassword() async { if (!_formKey.currentState!.validate()) return; setState(() => _loading = true); final response = await http.post( Uri.parse('$baseUrl/forgot-password/reset'), headers: {'Accept': 'application/json'}, body: { 'nis': _nisController.text, 'new_password': _newPassController.text, 'confirm_password': _confirmPassController.text, }, ); final data = jsonDecode(response.body); setState(() => _loading = false); if (response.statusCode == 200) { ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: Text(data['message'])), ); Navigator.pop(context); // kembali ke halaman login } else { ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: Text(data['message'] ?? 'Gagal mereset password')), ); } } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: const Text("Reset Password")), body: Padding( padding: const EdgeInsets.all(20), child: Form( key: _formKey, child: Column( children: [ TextFormField( controller: _nisController, decoration: const InputDecoration( labelText: "NIS", border: OutlineInputBorder(), ), validator: (val) => val == null || val.isEmpty ? 'NIS wajib diisi' : null, ), const SizedBox(height: 16), TextFormField( controller: _newPassController, obscureText: true, decoration: const InputDecoration( labelText: "Password Baru", border: OutlineInputBorder(), ), validator: (val) => val == null || val.length < 6 ? 'Minimal 6 karakter' : null, ), const SizedBox(height: 16), TextFormField( controller: _confirmPassController, obscureText: true, decoration: const InputDecoration( labelText: "Konfirmasi Password", border: OutlineInputBorder(), ), validator: (val) => val != _newPassController.text ? 'Tidak cocok' : null, ), const SizedBox(height: 24), SizedBox( width: double.infinity, child: ElevatedButton( onPressed: _loading ? null : _resetPassword, child: _loading ? const CircularProgressIndicator( color: Colors.white, strokeWidth: 2, ) : const Text("Reset Password"), ), ) ], ), ), ), ); } }