// lib/views/login_screen.dart import 'package:flutter/material.dart'; import 'package:tm_app/core/routes/app_routes.dart'; import '../../core/constants/assets.dart'; import '../../core/constants/strings.dart'; import '../../core/utils/size_config.dart'; import 'widgets/widgets.dart'; import '../../view_models/login_view_model.dart'; class LoginMobileScreen extends StatefulWidget { const LoginMobileScreen({super.key}); @override State createState() => _LoginMobileScreenState(); } class _LoginMobileScreenState extends State { late final LoginViewModel _viewModel; @override void initState() { super.initState(); _viewModel = LoginViewModel(); } @override void dispose() { _viewModel.dispose(); super.dispose(); } @override Widget build(BuildContext context) { SizeConfig.init(context); return Scaffold( backgroundColor: Colors.white, body: Center( child: SingleChildScrollView( padding: EdgeInsets.symmetric(horizontal: 24.0.w()), child: ListenableBuilder( listenable: _viewModel, builder: (context, _) { return Column( mainAxisSize: MainAxisSize.min, children: [ LoginLogo(width: 190.0.w(), height: 88.0.h()), SizedBox(height: 32.0.h()), const LoginTitle(), SizedBox(height: 32.0.h()), LoginTextField( controller: _viewModel.usernameController, focusNode: _viewModel.usernameFocus, label: AppStrings.usernameLabel, iconPath: AssetsManager.userIcon, ), SizedBox(height: 16.0.h()), LoginTextField( controller: _viewModel.passwordController, focusNode: _viewModel.passwordFocus, label: AppStrings.passwordLabel, iconPath: AssetsManager.passwordIcon, isPassword: true, obscureText: _viewModel.obscurePassword, onToggleVisibility: _viewModel.togglePasswordVisibility, ), SizedBox(height: 32.0.h()), BaseButton( isEnabled: _viewModel.isLoginEnabled, onPressed: _viewModel.isLoginEnabled ? () { HomeRouteData().go(context); } : null, ), ], ); }, ), ), ), ); } }