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:pharmacy_mobile/auth/auth_service.dart'; import 'package:pharmacy_mobile/blocs/caches/categorylist/functions/cache_setcategorylist.dart'; import 'package:pharmacy_mobile/blocs/caches/genericlist/functions/cache_setgenericlist.dart'; import 'package:pharmacy_mobile/blocs/caches/manufacturerlist/functions/cache_setmanufacturerlist.dart'; import 'package:pharmacy_mobile/blocs/caches/typelist/functions/cache_settypelist.dart'; import 'package:pharmacy_mobile/tables/ref_categories.dart'; import 'package:pharmacy_mobile/tables/ref_generic_names.dart'; import 'package:pharmacy_mobile/tables/ref_manufacturers.dart'; import 'package:pharmacy_mobile/tables/ref_types.dart'; import 'package:pharmacy_mobile/widgets/buttonwithprogress_widget.dart'; import 'package:pharmacy_mobile/widgets/menu_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:supabase_flutter/supabase_flutter.dart'; class MainPage extends StatefulWidget { const MainPage({super.key}); @override State createState() => _MainPageState(); } class _MainPageState extends State { final _authService = AuthService(); final _refCategories = RefCategories(); final _refGenericNames = RefGenericNames(); final _refTypes = RefTypes(); final _refManufacturers = RefManufacturers(); late bool _isLoading = false; void signOut() async { try { setState(() { _isLoading = true; }); // ignore: use_build_context_synchronously await _authService.signOut().then((_) => {context.go('/'), showNotification(context, 'Logged Out', true)}); } catch (e) { if (e is AuthException) { final errorMessage = e.message; if (mounted) { showNotification(context, 'Error: $errorMessage', false); } } } finally { setState(() { _isLoading = false; }); } } // void _getList() async { // _categoryList = await _refCategories.getList(); // if (_categoryList.isEmpty) { // if (mounted) { // showNotification(context, 'Error: No Categories Found', false); // WidgetsBinding.instance.addPostFrameCallback((_) { // if (mounted) { // context.push('/main'); // } // }); // } // } else { // setState(() => {}); // } // } Future _getCategoryListCache() async { final categoryList = await _refCategories.getList(); if (categoryList.isNotEmpty) { // ignore: use_build_context_synchronously final setCache = await cacheSetCategoryList(context, categoryList); if (!setCache) {} } } Future _getGenericListCache() async { final genericNameList = await _refGenericNames.getList(); if (genericNameList.isNotEmpty) { // ignore: use_build_context_synchronously final setCache = await cacheSetGenericList(context, genericNameList); if (!setCache) {} } } Future _getTypeListCache() async { final typeList = await _refTypes.getList(); if (typeList.isNotEmpty) { // ignore: use_build_context_synchronously final setCache = await cacheSetTypeList(context, typeList); if (!setCache) {} } } Future _getManufacturerListCache() async { final manufacturerList = await _refManufacturers.getList(); if (manufacturerList.isNotEmpty) { // ignore: use_build_context_synchronously final setCache = await cacheSetManufacturerList(context, manufacturerList); if (!setCache) {} } } void autoRun() async { await _getCategoryListCache(); await _getGenericListCache(); await _getTypeListCache(); await _getManufacturerListCache(); } @override void initState() { autoRun(); super.initState(); } @override Widget build(BuildContext context) { return PopScope( canPop: false, child: Scaffold( resizeToAvoidBottomInset: false, body: SingleChildScrollView( child: PageBackgroundWidget( height: MediaQuery.of(context).size.height + 500, page: 'menu', child: Center( child: Column( children: [ const Gap(96), const TitleWidget( firstTextSize: 14, secondTextSize: 24, logoSize: 90, ), const Gap(32), const TextWidget( text: 'Menu', title: true, ), const Gap(16), MenuWidget( icon: FontAwesomeIcons.circlePlus, text: 'Add Manufacturer', description: 'Register manufacturer to the list', onPressed: () => {context.push('/addmanufactorer')}, color: 'blue', ), const Gap(16), MenuWidget( icon: FontAwesomeIcons.circlePlus, text: 'Add Type', description: 'Register new medical type', onPressed: () => {context.push('/addtype')}, color: 'blue', ), const Gap(16), MenuWidget( icon: FontAwesomeIcons.circlePlus, text: 'Add Category', description: 'Register new medicine category', onPressed: () => {context.push('/addcategory')}, color: 'blue', ), const Gap(16), MenuWidget( icon: FontAwesomeIcons.circlePlus, text: 'Add Generics', description: 'Register generic name', onPressed: () => {context.push('/addgenerics')}, color: 'blue'), const Gap(32), MenuWidget( icon: FontAwesomeIcons.circlePlus, text: 'Add Medicine', description: 'Register medicine to the global list', onPressed: () => {context.push('/addmedicines')}, color: 'green'), const Gap(16), MenuWidget( icon: FontAwesomeIcons.circlePlus, text: 'Add Stock', description: 'Add a new stock', onPressed: () => {context.push('/addstock')}, color: 'green'), const Gap(32), MenuWidget( icon: Icons.delete, text: 'Remove Stock', description: 'Reduce stock based on purchase', onPressed: () => {context.push('/deletestock')}, color: 'red'), const Gap(32), MenuWidget( icon: FontAwesomeIcons.listCheck, text: 'List of Stocks', description: 'View the list of available stocks', onPressed: () => {context.push('/liststocks')}, color: 'yellow'), const Gap(40), ButtonWithProgressWidget( trigger: _isLoading, progressText: 'Logging Out', buttonText: 'Logout', onPressed: signOut) ], ), ), ), ), )); } }