import 'package:flutter/material.dart'; import 'package:glowwheels/provider/shop_provider.dart'; import 'package:google_fonts/google_fonts.dart'; import 'package:provider/provider.dart'; import '../screens/main_screen.dart'; class LoginScreen extends StatefulWidget { @override State createState() => _LoginScreenState(); } class _LoginScreenState extends State { final TextEditingController _emailController = TextEditingController(); final TextEditingController _passwordController = TextEditingController(); final _formKey = GlobalKey(); bool _isLoading = false; bool _obscurePassword = true; void _handleLogin(BuildContext context) async { if (!_formKey.currentState!.validate()) return; final shopProvider = Provider.of(context, listen: false); setState(() => _isLoading = true); final success = await shopProvider.login( _emailController.text.trim(), _passwordController.text.trim(), ); setState(() => _isLoading = false); if (success) { Navigator.pushReplacement( context, MaterialPageRoute(builder: (context) => MainScreen()), ); } else { ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: Text('Login failed. Check credentials.')), ); } } @override Widget build(BuildContext context) { return Scaffold( backgroundColor: Colors.white, body: SingleChildScrollView( child: Column( children: [ // Top Banner Container( decoration: BoxDecoration( gradient: LinearGradient( begin: Alignment.topCenter, end: Alignment.bottomCenter, colors: [ Color.fromRGBO(80, 166, 242, 0.66), Color.fromRGBO(168, 134, 255, 0.66), Color.fromRGBO(86, 88, 255, 0.38), Color.fromRGBO(214, 246, 255, 0.66), ], ), borderRadius: BorderRadius.only( bottomRight: Radius.elliptical(300, 110), ), ), child: Padding( padding: const EdgeInsets.all(20.0), child: Column( children: [ SizedBox(height: 30), Image.asset('assets/images/signinlogo.png', height: 250), SizedBox(height: 20), Align( alignment: Alignment.centerLeft, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text("Welcome back!", style: GoogleFonts.istokWeb( fontSize: 18, color: Color.fromRGBO(25, 25, 112, 0.87), fontWeight: FontWeight.w700, )), Container( width: 200, child: Text("Please sign in to continue", style: GoogleFonts.radioCanada( fontSize: 24, fontWeight: FontWeight.w700, height: 0.9, color: Color.fromRGBO(25, 25, 112, 0.87), )), ), ], ), ), ], ), ), ), // Login Form Padding( padding: const EdgeInsets.symmetric(horizontal: 20.0), child: Form( key: _formKey, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ SizedBox(height: 20), Text('Enter Email Id', style: GoogleFonts.radioCanada(fontSize: 16)), SizedBox(height: 5), TextFormField( controller: _emailController, validator: (value) { if (value == null || value.isEmpty) { return 'Please enter your email'; } if (!RegExp(r'^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$').hasMatch(value)) { return 'Enter a valid email'; } return null; }, decoration: InputDecoration( hintText: 'abcd@gmail.com', border: OutlineInputBorder( borderRadius: BorderRadius.circular(15.0), ), ), ), SizedBox(height: 20), Text('Enter Password', style: GoogleFonts.radioCanada(fontSize: 16)), SizedBox(height: 5), TextFormField( controller: _passwordController, obscureText: _obscurePassword, validator: (value) { if (value == null || value.isEmpty) { return 'Please enter your password'; } return null; }, decoration: InputDecoration( hintText: 'Enter your password', border: OutlineInputBorder( borderRadius: BorderRadius.circular(15.0), ), suffixIcon: IconButton( icon: Icon( _obscurePassword ? Icons.visibility_off : Icons.visibility, ), onPressed: () { setState(() { _obscurePassword = !_obscurePassword; }); }, ), ), ), SizedBox(height: 30), // Login Button SizedBox( width: double.infinity, height: 50, child: ElevatedButton( style: ElevatedButton.styleFrom( backgroundColor: Color(0xFF1F1762), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(25), ), ), onPressed: _isLoading ? null : () => _handleLogin(context), child: _isLoading ? CircularProgressIndicator(color: Colors.white) : Text( 'Login', style: GoogleFonts.inter( fontSize: 16, color: Colors.white, fontWeight: FontWeight.w700, ), ), ), ) ], ), ), ), ], ), ), ); } }