import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_svg/svg.dart'; import 'package:kmobile/features/auth/screens/mpin_screen.dart'; import '../../../app.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 _customerNumberController = TextEditingController(); final _passwordController = TextEditingController(); bool _obscurePassword = true; @override void dispose() { _customerNumberController.dispose(); _passwordController.dispose(); super.dispose(); } void _submitForm() { // if (_formKey.currentState!.validate()) { // context.read().login( // _customerNumberController.text.trim(), // _passwordController.text, // ); // } Navigator.of(context).pushReplacement( MaterialPageRoute(builder: (context) => const MPinScreen()), ); } @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 NavigationScaffold()), ); } 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 SvgPicture.asset('assets/images/kccb_logo.svg', width: 100, height: 100,), const SizedBox(height: 16), // Title const Text( 'KCCB', style: TextStyle(fontSize: 28, fontWeight: FontWeight.bold, color: Colors.blue), ), const SizedBox(height: 48), TextFormField( controller: _customerNumberController, decoration: const InputDecoration( labelText: 'Customer Number', // prefixIcon: Icon(Icons.person), border: OutlineInputBorder(), isDense: true, filled: true, fillColor: Colors.white, enabledBorder: OutlineInputBorder( borderSide: BorderSide(color: Colors.black), ), focusedBorder: OutlineInputBorder( borderSide: BorderSide(color: Colors.black, width: 2), ), ), keyboardType: TextInputType.number, 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(), isDense: true, filled: true, fillColor: Colors.white, enabledBorder: const OutlineInputBorder( borderSide: BorderSide(color: Colors.black), ), focusedBorder: const OutlineInputBorder( borderSide: BorderSide(color: Colors.black, width: 2), ), 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), SizedBox( width: 250, child: ElevatedButton( onPressed: state is AuthLoading ? null : _submitForm, style: ElevatedButton.styleFrom( shape: const StadiumBorder(), padding: const EdgeInsets.symmetric(vertical: 16), backgroundColor: Colors.white, foregroundColor: Colors.blueAccent, side: const BorderSide(color: Colors.black, width: 1), elevation: 0 ), child: state is AuthLoading ? const CircularProgressIndicator() : const Text('Login', style: TextStyle(fontSize: 16),), ), ), const SizedBox(height: 15), // OR Divider const Padding( padding: EdgeInsets.symmetric(vertical: 16), child: Row( children: [ Expanded(child: Divider()), Padding( padding: EdgeInsets.symmetric(horizontal: 8), child: Text('OR'), ), Expanded(child: Divider()), ], ), ), const SizedBox(height: 25), // Register Button SizedBox( width: 250, child: ElevatedButton( onPressed: () { // Handle register }, style: OutlinedButton.styleFrom( shape: const StadiumBorder(), padding: const EdgeInsets.symmetric(vertical: 16), backgroundColor: Colors.lightBlue[100], foregroundColor: Colors.black ), child: const Text('Register'), ), ), ], ), ), ); }, ), ); } }