import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:gap/gap.dart'; import 'package:go_router/go_router.dart'; import 'package:internet_connection_checker/internet_connection_checker.dart'; import 'package:pharmacy_mobile/auth/auth_service.dart'; import 'package:pharmacy_mobile/blocs/guest/functions/bloc_getgueststatus.dart'; import 'package:pharmacy_mobile/blocs/guest/functions/bloc_setguestoff.dart'; import 'package:pharmacy_mobile/blocs/guest/functions/bloc_setgueston.dart'; import 'package:pharmacy_mobile/widgets/buttonwithprogress_widget.dart'; import 'package:pharmacy_mobile/widgets/customer_pagebackground_widget.dart'; import 'package:pharmacy_mobile/widgets/customer_title_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/snackbar_widget.dart'; import 'package:pharmacy_mobile/widgets/text_widget.dart'; import 'package:animated_notch_bottom_bar/animated_notch_bottom_bar/animated_notch_bottom_bar.dart'; import 'package:supabase_flutter/supabase_flutter.dart'; class CustomerCartPage extends StatefulWidget { final NotchBottomBarController? controller; const CustomerCartPage({super.key, this.controller}); @override State createState() => _CustomerCartPageState(); } class _CustomerCartPageState extends State { final _emailController = TextEditingController(); final _passwordController = TextEditingController(); final _authService = AuthService(); final _focusNode = FocusNode(); bool _isLoading = false; double containerHeight = 0.35; late bool _isGuest = false; void checkGuest() async { final isGuest = await blocGetGuestStatus(context); setState(() { _isGuest = isGuest; }); } void setGuest(bool value) async { // ignore: use_build_context_synchronously final success = value ? await blocSetGuestOn(context) : await blocSetGuestOff(context); if (success) { setState(() { _isGuest = value; }); } } 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); final user = _authService.getCurrentUser(); if (user != null) { // ignore: use_build_context_synchronously final disableGuest = await blocSetGuestOff(context); if (disableGuest) { // ignore: use_build_context_synchronously showNotification(context, 'Login Successful', true); WidgetsBinding.instance.addPostFrameCallback((_) { if (user.contains('admin')) { if (mounted) context.go('/main'); } else { setGuest(false); } }); } else { // ignore: use_build_context_synchronously showNotification(context, 'Error: Login failed', false); } } } 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; }); } } void autoRun() async { checkGuest(); } @override void initState() { autoRun(); super.initState(); } @override void dispose() { _emailController.dispose(); _passwordController.dispose(); _focusNode.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( body: CustomerPagebackgroundWidget( child: Column( children: [ const Gap(68), const CustomerTitleWidget(), const Gap(32), if (_isGuest) SizedBox( child: Column( children: [ FaIcon( FontAwesomeIcons.cartShopping, size: 56, color: const Color.fromRGBO(255, 255, 255, 1), ), const Gap(16), const TextWidget( text: 'Cart is disabled for guests', size: 12, ), const Gap(32), const TextWidget( text: 'Please login', size: 20, ), const TextWidget( text: 'to use your cart', size: 16, ), const Gap(32), Padding( padding: const EdgeInsets.only(left: 32, right: 32), child: GlossyContainerWidget( 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), ], )), ), ), ], ), ) else SizedBox( child: Column( children: [ FaIcon( FontAwesomeIcons.cartShopping, size: 56, color: const Color.fromRGBO(255, 255, 255, 1), ), const Gap(16), const TextWidget( text: 'No items in cart', size: 24, ) ], ), ) // const TextWidget(text: 'My Cart'), // const Gap(16), ], ))); } }