import 'package:autos/core/widgets/sso_icon_button.dart'; import 'package:autos/core/widgets/wave_background.dart'; import 'package:autos/presentation/providers/user_provider.dart'; import 'package:autos/presentation/screens/auth/forgot_password_screen.dart'; import 'package:autos/presentation/screens/auth/sign_up_screen.dart'; import 'package:autos/presentation/screens/dashboard/dashboard_screen.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:fluttertoast/fluttertoast.dart'; class LoginScreen extends ConsumerStatefulWidget { const LoginScreen({super.key}); @override ConsumerState createState() => _LoginScreenState(); } class _LoginScreenState extends ConsumerState { final emailController = TextEditingController(text: ""); ///balaputhiyavan4@gmail.com final passwordController = TextEditingController(text: ""); //123456 bool isPasswordVisible = false; @override void dispose() { emailController.dispose(); passwordController.dispose(); super.dispose(); } void _showToast(String message, {bool success = true}) { Fluttertoast.showToast( msg: message, toastLength: Toast.LENGTH_SHORT, gravity: ToastGravity.BOTTOM, backgroundColor: success ? Colors.green : Colors.red, textColor: Colors.white, fontSize: 16.0, ); } @override Widget build(BuildContext context) { final userState = ref.watch(loginProvider); final size = MediaQuery.of(context).size; final double verticalSpace = size.height * 0.02; final double horizontalPadding = size.width * 0.06; ref.listen(loginProvider, (previous, next) { if (next.hasValue && next.value != null) { _showToast("Login Successful"); Navigator.pushReplacement( context, MaterialPageRoute(builder: (_) => const DashboardScreen()), ); } else if (next.hasError) { _showToast("⚠️ ${next.error}", success: false); } }); return Scaffold( resizeToAvoidBottomInset: true, body: WaveBackground( child: Padding( padding: EdgeInsets.symmetric( horizontal: horizontalPadding, vertical: verticalSpace, ), child: Center( child: SingleChildScrollView( physics: const BouncingScrollPhysics(), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ SizedBox(height: size.height * 0.07), /// Logo Image.asset( 'assets/auth/autos_transp.png', height: size.height * 0.14, ), /// Sign In Text Row( children: [ const Text( "Sign In", style: TextStyle( fontSize: 32, fontWeight: FontWeight.bold, ), ), const Spacer(), ], ), SizedBox(height: verticalSpace), /// Email Field TextField( controller: emailController, decoration: const InputDecoration( hintText: "Email", prefixIcon: Icon(Icons.email_outlined), ), ), SizedBox(height: verticalSpace * 1.5), /// Password Field TextField( controller: passwordController, obscureText: !isPasswordVisible, decoration: InputDecoration( hintText: "Password", prefixIcon: const Icon(Icons.lock_outline), suffixIcon: IconButton( onPressed: () { setState(() { isPasswordVisible = !isPasswordVisible; }); }, icon: Icon( isPasswordVisible ? Icons.visibility : Icons.visibility_off, ), ), ), ), /// Forgot Password Row( children: [ const Spacer(), TextButton( onPressed: () { Navigator.push( context, MaterialPageRoute( builder: (_) => const ForgotPasswordScreen(), ), ); }, child: const Text( "Forgot Password?", style: TextStyle(color: Color(0xFF3B81F9)), ), ), ], ), SizedBox(height: verticalSpace * 1.5), /// Login Button userState.isLoading ? const CircularProgressIndicator() : ElevatedButton( onPressed: () async { await ref .read(loginProvider.notifier) .login( emailController.text.trim(), passwordController.text.trim(), ); }, style: ElevatedButton.styleFrom( backgroundColor: const Color(0xFF3B81F9), minimumSize: Size( double.infinity, size.height * 0.05, ), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(40), ), ), child: const Text( "Sign In", style: TextStyle( fontSize: 18, fontWeight: FontWeight.bold, color: Colors.white, ), ), ), SizedBox(height: verticalSpace * 1.5), /// Divider or Row( children: const [ Expanded( child: Divider( thickness: 0.5, color: Colors.grey, endIndent: 10, ), ), Text("or"), Expanded( child: Divider( thickness: 0.5, color: Colors.grey, indent: 10, ), ), ], ), SizedBox(height: verticalSpace * 1.5), /// SSO Buttons Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Flexible( child: SsoIconButton( assetPath: 'assets/auth/sso-google.png', shadow: const BoxShadow( color: Colors.black12, blurRadius: 12, ), onPressed: () {}, ), ), SizedBox(width: size.width * 0.1), Flexible( child: SsoIconButton( assetPath: 'assets/auth/sso-apple.png', shadow: const BoxShadow( color: Colors.black12, blurRadius: 12, ), onPressed: () {}, ), ), ], ), SizedBox(height: verticalSpace * 1), /// Sign Up Link Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Text( "Don't have an account? ", style: Theme.of(context).textTheme.bodyMedium, ), TextButton( onPressed: () { Navigator.push( context, MaterialPageRoute( builder: (_) => const SignUpScreen(), ), ); }, child: Text( "Sign Up", style: TextStyle( color: Theme.of(context).colorScheme.primary, fontWeight: FontWeight.w600, ), ), ), ], ), SizedBox(height: verticalSpace * 2), ], ), ), ), ), ), ); } }