import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import '../controllers/auth_cubit.dart'; import '../controllers/auth_state.dart'; import '../../dashboard/screens/dashboard_screen.dart'; class LoginScreen extends StatefulWidget { const LoginScreen({super.key}); @override LoginScreenState createState() => LoginScreenState(); } class LoginScreenState extends State { final _formKey = GlobalKey(); final _usernameController = TextEditingController(); final _passwordController = TextEditingController(); bool _obscurePassword = true; @override void dispose() { _usernameController.dispose(); _passwordController.dispose(); super.dispose(); } void _submitForm() { if (_formKey.currentState!.validate()) { context.read().login( _usernameController.text.trim(), _passwordController.text, ); } } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: const Text('Login')), body: BlocConsumer( listener: (context, state) { if (state is Authenticated) { Navigator.of(context).pushReplacement( MaterialPageRoute(builder: (context) => const DashboardScreen()), ); } else if (state is AuthError) { ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: Text(state.message)), ); } }, builder: (context, state) { return Padding( padding: const EdgeInsets.all(24.0), child: Form( key: _formKey, child: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.stretch, children: [ // Bank logo or app branding const FlutterLogo(size: 80), const SizedBox(height: 48), TextFormField( controller: _usernameController, decoration: const InputDecoration( labelText: 'Username', prefixIcon: Icon(Icons.person), border: OutlineInputBorder(), ), textInputAction: TextInputAction.next, validator: (value) { if (value == null || value.isEmpty) { return 'Please enter your username'; } return null; }, ), const SizedBox(height: 16), TextFormField( controller: _passwordController, decoration: InputDecoration( labelText: 'Password', prefixIcon: const Icon(Icons.lock), border: const OutlineInputBorder(), suffixIcon: IconButton( icon: Icon( _obscurePassword ? Icons.visibility : Icons.visibility_off, ), onPressed: () { setState(() { _obscurePassword = !_obscurePassword; }); }, ), ), obscureText: _obscurePassword, validator: (value) { if (value == null || value.isEmpty) { return 'Please enter your password'; } return null; }, ), Align( alignment: Alignment.centerRight, child: TextButton( onPressed: () { // Navigate to forgot password screen }, child: const Text('Forgot Password?'), ), ), const SizedBox(height: 24), ElevatedButton( onPressed: state is AuthLoading ? null : _submitForm, style: ElevatedButton.styleFrom( padding: const EdgeInsets.symmetric(vertical: 16), ), child: state is AuthLoading ? const CircularProgressIndicator() : const Text('LOGIN', style: TextStyle(fontSize: 16)), ), const SizedBox(height: 16), // Registration option Row( mainAxisAlignment: MainAxisAlignment.center, children: [ const Text("Don't have an account?"), TextButton( onPressed: () { // Navigate to registration screen }, child: const Text('Register'), ), ], ), ], ), ), ); }, ), ); } }