import 'package:flutter/material.dart'; import 'package:kent_logistics_app/screens/welcome_screen.dart'; import 'package:provider/provider.dart'; import '../providers/auth_provider.dart'; import '../widgets/rounded_input.dart'; import '../widgets/primary_button.dart'; import 'main_bottom_nav.dart'; class LoginScreen extends StatefulWidget { const LoginScreen({super.key}); @override State createState() => _LoginScreenState(); } class _LoginScreenState extends State { final cLoginId = TextEditingController(); final cPassword = TextEditingController(); @override void dispose() { cLoginId.dispose(); cPassword.dispose(); super.dispose(); } Future _login() async { final auth = Provider.of(context, listen: false); final id = cLoginId.text.trim(); final pass = cPassword.text.trim(); if (id.isEmpty || pass.isEmpty) { ScaffoldMessenger.of(context) .showSnackBar(const SnackBar(content: Text("Please fill all fields"))); return; } final res = await auth.login(context, id, pass); if (res['success'] == true) { if (!mounted) return; Navigator.pushReplacement( context, MaterialPageRoute(builder: (_) => const MainBottomNav()), ); } else { ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: Text(res['message'] ?? "Login failed")), ); } } @override Widget build(BuildContext context) { final auth = Provider.of(context); final width = MediaQuery.of(context).size.width; /// ⭐ RESPONSIVE SCALE final scale = (width / 390).clamp(0.85, 1.25); return Scaffold( backgroundColor: const Color(0xFFE8F0FF), body: Stack( children: [ /// 🔵 Floating Back Button (Responsive Position + Size) Positioned( top: 40 * scale, left: 12 * scale, child: Material( elevation: 6 * scale, color: Colors.indigo.shade700, shape: const CircleBorder(), child: InkWell( onTap: () { Navigator.pushReplacement( context, MaterialPageRoute(builder: (_) => const WelcomeScreen()), ); }, child: Padding( padding: EdgeInsets.all(10 * scale), child: Icon(Icons.arrow_back, color: Colors.white, size: 20 * scale), ), ), ), ), /// 📦 Center White Card (Responsive) Center( child: Container( width: width * 0.87, padding: EdgeInsets.symmetric( vertical: 28 * scale, horizontal: 20 * scale, ), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(22 * scale), boxShadow: [ BoxShadow( color: Colors.black12, blurRadius: 18 * scale, spreadRadius: 1, offset: Offset(0, 6 * scale), ), ], ), child: Column( mainAxisSize: MainAxisSize.min, children: [ Text( "Login", style: TextStyle( fontSize: 26 * scale, fontWeight: FontWeight.bold, color: Colors.indigo.shade700, ), ), SizedBox(height: 25 * scale), /// Login ID Input Container( decoration: BoxDecoration( color: const Color(0xFFD8E7FF), borderRadius: BorderRadius.circular(14 * scale), ), child: RoundedInput( controller: cLoginId, hint: "Email / Mobile / Customer ID", ), ), SizedBox(height: 16 * scale), /// Password Input Container( decoration: BoxDecoration( color: const Color(0xFFD8E7FF), borderRadius: BorderRadius.circular(14 * scale), ), child: RoundedInput( controller: cPassword, hint: "Password", obscure: true, ), ), SizedBox(height: 25 * scale), /// Login Button PrimaryButton( label: "Login", onTap: _login, busy: auth.loading, ), ], ), ), ), ], ), ); } }