import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import '../../core/error_handler.dart'; import '../../core/theme.dart'; import '../../providers/auth_provider.dart'; import '../../services/fcm_service.dart'; import '../../widgets/atoms/custom_text_field.dart'; import '../../widgets/atoms/custom_button.dart'; class LoginScreen extends StatefulWidget { const LoginScreen({super.key}); @override State createState() => _LoginScreenState(); } class _LoginScreenState extends State { final _emailController = TextEditingController(); final _passwordController = TextEditingController(); final _formKey = GlobalKey(); @override void dispose() { _emailController.dispose(); _passwordController.dispose(); super.dispose(); } void _handleLogin() async { if (_formKey.currentState!.validate()) { final success = await context.read().login( _emailController.text, _passwordController.text, ); if (success && mounted) { await FcmService().initialize(context); if (mounted) Navigator.pushReplacementNamed(context, '/onboarding/check'); } else if (mounted) { ErrorHandler.showError(context.read().errorMessage ?? 'Login Failed'); } } } @override Widget build(BuildContext context) { final isLoading = context.watch().isLoading; return Scaffold( backgroundColor: AppTheme.bgWhite, body: SafeArea( child: Padding( padding: const EdgeInsets.symmetric(horizontal: AppTheme.spacingLg), child: Center( child: SingleChildScrollView( child: Form( key: _formKey, child: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ const SizedBox(height: AppTheme.spacingXl), Image.asset( 'assets/images/logo.png', height: 80, width: 200, fit: BoxFit.contain, ), const SizedBox(height: AppTheme.spacingXxl), Align( alignment: Alignment.centerLeft, child: Text( "Masuk ke Akun", style: AppTheme.heading3, ), ), const SizedBox(height: AppTheme.spacingLg), CustomTextField( label: "Email", hint: "Masukkan Email Anda", controller: _emailController, keyboardType: TextInputType.emailAddress, validator: (value) { if (value == null || value.isEmpty) { return 'Email tidak boleh kosong'; } return null; }, ), const SizedBox(height: AppTheme.spacingMd), CustomTextField( label: "Password", hint: "Masukkan Password", controller: _passwordController, isPassword: true, validator: (value) { if (value == null || value.isEmpty) { return 'Password tidak boleh kosong'; } return null; }, ), const SizedBox(height: AppTheme.spacingXl), CustomButton( text: "Masuk", onPressed: _handleLogin, isLoading: isLoading, type: ButtonType.primary, ), const SizedBox(height: AppTheme.spacingXl), ], ), ), ), ), ), ), ); } }