import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import '../providers/auth_provider.dart'; import '../widgets/rounded_input.dart'; import '../widgets/primary_button.dart'; import 'dashboard_screen.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); // Basic validation final loginId = cLoginId.text.trim(); final password = cPassword.text.trim(); if (loginId.isEmpty || password.isEmpty) { ScaffoldMessenger.of(context).showSnackBar(const SnackBar(content: Text('Please enter login id and password'))); return; } final res = await auth.login(loginId, password); // Your controller returns { success: true/false, message, token, user } if (res['success'] == true) { // Navigate to dashboard if (!mounted) return; Navigator.of(context).pushReplacement(MaterialPageRoute(builder: (_) => const DashboardScreen())); } else { final msg = res['message']?.toString() ?? 'Login failed'; if (!mounted) return; ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(msg))); } } @override Widget build(BuildContext context) { final auth = Provider.of(context); final width = MediaQuery.of(context).size.width; return Scaffold( appBar: AppBar(title: const Text('Login')), body: Padding( padding: EdgeInsets.symmetric(horizontal: width * 0.06, vertical: 20), child: Column( children: [ RoundedInput(controller: cLoginId, hint: 'Email / Mobile / Customer ID', keyboardType: TextInputType.text), const SizedBox(height: 12), RoundedInput(controller: cPassword, hint: 'Password', obscure: true), const SizedBox(height: 18), PrimaryButton(label: 'Login', onTap: _login, busy: auth.loading), ], ), ), ); } }