import 'package:flutter/material.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/buttonwithprogress_widget.dart'; import 'package:pharmacy_mobile/widgets/glossy_container_widget.dart'; import 'package:pharmacy_mobile/widgets/input_form_widget.dart'; import 'package:pharmacy_mobile/widgets/page_background_widget.dart'; import 'package:pharmacy_mobile/widgets/snackbar_widget.dart'; import 'package:pharmacy_mobile/widgets/text_widget.dart'; import 'package:pharmacy_mobile/widgets/title_widget.dart'; import 'package:internet_connection_checker/internet_connection_checker.dart'; import 'package:supabase_flutter/supabase_flutter.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(); late bool _isLoading = false; late double containerHeight = 0.35; void _signIn() async { final email = _emailController.text; final password = _passwordController.text; if (email.isEmpty) { if (mounted) { showNotification(context, 'Error: Please enter a valid email', false); } return; } if (password.isEmpty) { if (mounted) { showNotification(context, 'Error: Please enter a password', false); } return; } setState(() { _isLoading = true; containerHeight = 0.365; }); try { if (await InternetConnectionChecker.instance.hasConnection) { await _authService.signIn(email, password); if (mounted) { final user = _authService.getCurrentUser(); if (user != null) { showNotification(context, 'Login Successful', true); WidgetsBinding.instance.addPostFrameCallback((_) { if (user.contains('admin')) { if (mounted) context.push('/main'); } else { if (mounted) context.push('/customer'); } }); } } } else { if (mounted) { showNotification(context, 'Error: No Internet Connection', false); } } } catch (e) { if (e is AuthException) { final errorMessage = e.message; if (mounted) { if (errorMessage == 'Invalid login credentials') { showNotification(context, 'Error: Invalid Email or Password', false); } } } } finally { setState(() { _isLoading = false; containerHeight = 0.35; }); } } @override void dispose() { _emailController.dispose(); _passwordController.dispose(); _focusNode.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( resizeToAvoidBottomInset: false, body: PageBackgroundWidget( page: 'login', child: Center( child: Column( mainAxisAlignment: MainAxisAlignment.start, children: [ const Gap(96), const TitleWidget( firstTextSize: 14, secondTextSize: 24, logoSize: 90, ), const Gap(32), const TextWidget( text: 'Login', title: true, ), const Gap(16), Padding( padding: const EdgeInsets.only(left: 32, right: 32), child: GlossyContainerWidget( // height: containerHeight, child: Form( child: Column( children: [ InputFormWidget(label: 'Email', controller: _emailController), const Gap(16), InputFormWidget( label: 'Password', controller: _passwordController, password: true, onSubmitted: (String password) { _signIn(); }, ), const Gap(40), ButtonWithProgressWidget( trigger: _isLoading, progressText: 'Logging In', buttonText: 'Login', onPressed: _signIn), ], )), ), ), const Gap(16), Row( mainAxisAlignment: MainAxisAlignment.center, children: [ const TextWidget( text: "Don't have an account?", size: 14, ), const Gap(8), GestureDetector( onTap: () => {context.push('/register')}, child: const TextWidget( text: 'Register here', size: 14, underlined: true, ), ) ], ) ], ), ), )); } }