import 'package:flutter/material.dart'; import '../services/auth_service.dart'; import 'dashboard_screen.dart'; import 'admin_dashboard_screen.dart'; // 🔥 tambah ini class LoginScreen extends StatefulWidget { const LoginScreen({super.key}); @override State createState() => _LoginScreenState(); } class _LoginScreenState extends State { final _formKey = GlobalKey(); final TextEditingController _emailController = TextEditingController(); final TextEditingController _passwordController = TextEditingController(); bool _obscurePassword = true; bool _isLoading = false; @override Widget build(BuildContext context) { final screenHeight = MediaQuery.of(context).size.height; return Scaffold( resizeToAvoidBottomInset: true, body: Container( width: double.infinity, height: double.infinity, decoration: const BoxDecoration( image: DecorationImage( image: AssetImage("assets/background.png"), fit: BoxFit.cover, ), ), child: SingleChildScrollView( child: Padding( padding: EdgeInsets.only( top: screenHeight * 0.12, left: 25, right: 25, ), child: Column( children: [ Image.asset( "assets/logo.png", width: 200, ), SizedBox(height: screenHeight * 0.05), Container( width: double.infinity, padding: const EdgeInsets.all(25), decoration: BoxDecoration( color: const Color.fromARGB(255, 165, 204, 54), borderRadius: BorderRadius.circular(25), ), child: Form( key: _formKey, child: Column( children: [ // ===== EMAIL ===== TextFormField( controller: _emailController, keyboardType: TextInputType.emailAddress, decoration: InputDecoration( labelText: "Email", filled: true, fillColor: const Color.fromARGB(255, 223, 242, 112), border: OutlineInputBorder( borderRadius: BorderRadius.circular(15), borderSide: BorderSide.none, ), ), validator: (value) { if (value == null || value.isEmpty) { return "Email tidak boleh kosong"; } return null; }, ), const SizedBox(height: 20), // ===== PASSWORD ===== TextFormField( controller: _passwordController, obscureText: _obscurePassword, decoration: InputDecoration( labelText: "Password", filled: true, fillColor: const Color.fromARGB(255, 223, 242, 112), border: OutlineInputBorder( borderRadius: BorderRadius.circular(15), borderSide: BorderSide.none, ), suffixIcon: IconButton( icon: Icon( _obscurePassword ? Icons.visibility_off : Icons.visibility, ), onPressed: () { setState(() { _obscurePassword = !_obscurePassword; }); }, ), ), validator: (value) { if (value == null || value.isEmpty) { return "Password tidak boleh kosong"; } return null; }, ), const SizedBox(height: 20), // ===== LOGIN BUTTON ===== SizedBox( width: 140, height: 45, child: ElevatedButton( style: ElevatedButton.styleFrom( backgroundColor: const Color.fromARGB(255, 11, 22, 0), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12), ), ), onPressed: _isLoading ? null : () async { if (_formKey.currentState!.validate()) { setState(() { _isLoading = true; }); try { final user = await AuthService().login( email: _emailController.text.trim(), password: _passwordController.text.trim(), ); if (user != null) { final role = user['role']; // 🔥 CEK ROLE if (role == "admin") { Navigator.pushReplacement( // ignore: use_build_context_synchronously context, MaterialPageRoute( builder: (_) => const AdminDashboardScreen(), ), ); } else { Navigator.pushReplacement( // ignore: use_build_context_synchronously context, MaterialPageRoute( builder: (_) => const DashboardScreen(), ), ); } } else { throw Exception( "Data user tidak ditemukan"); } } catch (e) { // ignore: use_build_context_synchronously ScaffoldMessenger.of(context) .showSnackBar( SnackBar( content: Text( e .toString() .replaceAll("Exception:", ""), ), backgroundColor: Colors.red, ), ); } setState(() { _isLoading = false; }); } }, child: _isLoading ? const CircularProgressIndicator( color: Colors.white, strokeWidth: 2, ) : const Text( "Login", style: TextStyle(color: Colors.white), ), ), ), ], ), ), ), ], ), ), ), ), ); } }