import 'package:flutter/material.dart'; import 'package:gap/gap.dart'; import 'package:pharmacy_mobile/tables/ref_categories.dart'; import 'package:pharmacy_mobile/tables/ref_generic_names.dart'; import 'package:pharmacy_mobile/tables/ref_manufactorers.dart'; import 'package:pharmacy_mobile/tables/ref_medicines.dart'; import 'package:pharmacy_mobile/tables/ref_types.dart'; import 'package:pharmacy_mobile/widgets/button_widget.dart'; import 'package:pharmacy_mobile/widgets/dropdown_widget.dart'; import 'package:pharmacy_mobile/widgets/form_border_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:visibility_detector/visibility_detector.dart'; class AddMedicinePage extends StatefulWidget { const AddMedicinePage({super.key}); @override State createState() => _AddMedicinePageState(); } class _AddMedicinePageState extends State { final _formKey = GlobalKey(); // final _authService = AuthService(); final _refGenericNames = RefGenericNames(); final _refCategories = RefCategories(); final _refTypes = RefTypes(); final _refManufactorer = RefManufactorers(); final _refMedicines = RefMedicines(); final _nameController = TextEditingController(); final FocusNode _focusNode = FocusNode(); bool _isVisible = false; late List _genericNameList = []; late String _selectedGeneric = ''; late String _selectedCategory = ''; late List _typeList = []; late String _selectedType = ''; late List _manufactorerList = []; late String _selectedManufactorer = ''; void autoRun() async { _genericNameList = await _refGenericNames.getList(); _typeList = await _refTypes.getList(); _manufactorerList = await _refManufactorer.getList(); } void _updateGeneric(dynamic generic) async { _selectedGeneric = generic; final catuuid = await _refGenericNames.getCategoryUUID(_selectedGeneric); final catname = await _refCategories.getName(catuuid); setState(() { _selectedCategory = catname; }); } void _updateType(dynamic type) { _selectedType = type; } void _updateManufactorer(dynamic manufactorer) { _selectedManufactorer = manufactorer; } void _saveMedicine() async { final medName = _nameController.text; final medGenericUUID = await _refGenericNames.getUUID(_selectedGeneric); final medTypeUUID = await _refTypes.getUUID(_selectedType); final medManufactorerUUID = await _refManufactorer.getUUID(_selectedManufactorer); await _refMedicines.postMedicine(medName, medGenericUUID, medManufactorerUUID, medTypeUUID); } @override void initState() { autoRun(); super.initState(); } @override void dispose() { _nameController.dispose(); _focusNode.dispose(); _genericNameList = []; _selectedGeneric = ''; _selectedCategory = ''; _typeList = []; _selectedType = ''; _manufactorerList = []; _selectedManufactorer = ''; super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( body: VisibilityDetector( key: Key('AddMedicinePage'), onVisibilityChanged: (visibilityInfo) { if (visibilityInfo.visibleFraction > 0.5 && !_isVisible) { setState(() { _isVisible = true; autoRun(); }); } }, child: PageBackgroundWidget( child: Center( child: Column( children: [ const Gap(104), const TitleWidget(firstTextSize: 20, secondTextSize: 32), const Gap(32), const TextWidget(text: 'Add Medicine'), const Gap(16), FormBorderWidget( color: 'green', child: Form( key: _formKey, child: Center( child: Column( children: [ InputWidget(label: 'Name', controller: _nameController), const Gap(16), Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ DropDownWidget( label: 'Generic Name', list: _genericNameList, listTitle: 'generic_name', onChanged: _updateGeneric), const Gap(8), TextWidget(text: _selectedCategory, size: 18), ], ), const Gap(16), DropDownWidget( label: 'Type', list: _typeList, listTitle: 'type_name', onChanged: _updateType), const Gap(16), DropDownWidget( label: 'Manufactorer', list: _manufactorerList, listTitle: 'manufactorer_name', onChanged: _updateManufactorer), const Gap(16), ButtonWidget(text: 'Save Medicine', onPressed: _saveMedicine) ], ), )), ) ], ), ), ), ), ); } }