// lib/views/login_screen.dart import 'package:flutter/material.dart'; import '../../core/constants/assets.dart'; import '../../core/constants/strings.dart'; import '../../size_config.dart'; import 'widgets/widgets.dart'; class LoginScreen extends StatefulWidget { const LoginScreen({super.key}); @override State createState() => _LoginScreenState(); } class _LoginScreenState extends State { final _usernameController = TextEditingController(); final _passwordController = TextEditingController(); final _usernameFocus = FocusNode(); final _passwordFocus = FocusNode(); bool _obscurePassword = true; bool get _isLoginEnabled => _usernameController.text.isNotEmpty && _passwordController.text.isNotEmpty; @override void initState() { super.initState(); _usernameController.addListener(_updateState); _passwordController.addListener(_updateState); _usernameFocus.addListener(_updateState); _passwordFocus.addListener(_updateState); } @override void dispose() { _usernameController.dispose(); _passwordController.dispose(); _usernameFocus.dispose(); _passwordFocus.dispose(); super.dispose(); } void _updateState() => setState(() {}); void _togglePasswordVisibility() => setState(() => _obscurePassword = !_obscurePassword); @override Widget build(BuildContext context) { return Scaffold( backgroundColor: Colors.white, body: Center( child: SingleChildScrollView( padding: EdgeInsets.symmetric(horizontal: 24.0.w()), child: Column( mainAxisSize: MainAxisSize.min, children: [ const LoginLogo(), SizedBox(height: 32.0.h()), const LoginTitle(), SizedBox(height: 32.0.h()), LoginTextField( controller: _usernameController, focusNode: _usernameFocus, label: AppStrings.usernameLabel, iconPath: AssetsManager.userIcon, ), SizedBox(height: 16.0.h()), LoginTextField( controller: _passwordController, focusNode: _passwordFocus, label: AppStrings.passwordLabel, iconPath: AssetsManager.passwordIcon, isPassword: true, obscureText: _obscurePassword, onToggleVisibility: _togglePasswordVisibility, ), SizedBox(height: 32.0.h()), LoginButton( isEnabled: _isLoginEnabled, onPressed: _isLoginEnabled ? () {} : null, ), ], ), ), ), ); } }