import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:go_router/go_router.dart'; import 'package:gap/gap.dart'; import 'package:pharmacy_mobile/auth/auth_service.dart'; import 'package:pharmacy_mobile/widgets/button_widget.dart'; import 'package:pharmacy_mobile/widgets/input_widget.dart'; import 'package:pharmacy_mobile/widgets/page_background_widget.dart'; import 'package:pharmacy_mobile/widgets/text_widget.dart'; import 'package:pharmacy_mobile/widgets/title_widget.dart'; import 'package:quickalert/quickalert.dart'; import 'package:internet_connection_checker/internet_connection_checker.dart'; class LoginPage extends StatefulWidget { const LoginPage({super.key}); @override State createState() => _LoginPageState(); } class _LoginPageState extends State { final _authService = AuthService(); final _emailController = TextEditingController(); final _passwordController = TextEditingController(); final FocusNode _focusNode = FocusNode(); bool _isLoading = false; void _signIn() async { if (_isLoading) return; final email = _emailController.text; final password = _passwordController.text; setState(() => _isLoading = true); try { if (await InternetConnectionChecker.instance.hasConnection) { await _authService.signIn(email, password); if (mounted) { QuickAlert.show( context: context, type: QuickAlertType.success, text: 'Login Successful', autoCloseDuration: const Duration(seconds: 2), showConfirmBtn: false, ).then((value) => { if (mounted && context.mounted) {context.push('/main')} }); } } else { if (mounted) { QuickAlert.show( context: context, type: QuickAlertType.error, text: 'No Internet Connection', autoCloseDuration: const Duration(seconds: 2), showConfirmBtn: false, ); // ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('Error: $e'))); } } } catch (e) { if (mounted) { QuickAlert.show( context: context, type: QuickAlertType.error, text: 'Error: $e', autoCloseDuration: const Duration(seconds: 5), showConfirmBtn: false, ); // ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('Error: $e'))); } } finally { setState(() => _isLoading = false); } // if (mounted) { // context.showSnackBar('Check your email for a login link!'); // _emailController.clear(); // } } @override void dispose() { _emailController.dispose(); _passwordController.dispose(); _focusNode.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( resizeToAvoidBottomInset: false, body: PageBackgroundWidget( child: Center( child: Column( mainAxisAlignment: MainAxisAlignment.start, children: [ const Gap(104), const TitleWidget(firstTextSize: 16, secondTextSize: 32), const Gap(32), const TextWidget(text: 'Login'), const Gap(16), Padding( padding: const EdgeInsets.only(left: 16, right: 16), child: Container( padding: EdgeInsets.all(32), decoration: BoxDecoration( color: const Color.fromARGB(219, 38, 17, 46), borderRadius: BorderRadius.all(Radius.circular(16)), // boxShadow: [ // BoxShadow( // color: const Color.fromRGBO(0, 0, 0, 1).withOpacity(0.4), // Subtle shadow to give depth // spreadRadius: 0, // blurRadius: 4, // offset: Offset(0, 2), // ) // ] ), child: Form( child: Column( children: [ InputWidget(label: 'Email', controller: _emailController), const Gap(16), KeyboardListener( focusNode: _focusNode, onKeyEvent: (event) { if (event is KeyDownEvent && event.logicalKey == LogicalKeyboardKey.enter) { _signIn(); } }, child: InputWidget( label: 'Password', controller: _passwordController, password: true, ), ), const Gap(24), // TextButton(onPressed: () => {_signIn()}, child: const Text('Login')) ButtonWidget(text: 'Login', onPressed: _signIn) ], )), ), ), ], ), ), )); } }