From 3572f90b240ddc06c6db44a7f0200c6df41aee1a Mon Sep 17 00:00:00 2001 From: Patrick Alvin Alcala Date: Fri, 28 Feb 2025 14:08:05 +0800 Subject: [PATCH] update --- .../arm64-v8a/configure_fingerprint.bin | 24 +++---- .../armeabi-v7a/configure_fingerprint.bin | 24 +++---- .../k6q1g3c4/x86/configure_fingerprint.bin | 24 +++---- .../k6q1g3c4/x86_64/configure_fingerprint.bin | 24 +++---- lib/functions/checkexisting_function.dart | 10 +++ lib/pages/add_generics_page.dart | 5 -- lib/pages/add_manufactorer.dart | 44 ++++++++++-- lib/pages/add_medicine_page.dart | 38 +---------- lib/pages/add_stock_page.dart | 45 ++++++------ lib/pages/add_type_page.dart | 2 - .../customer_itemview_page.dart | 13 ++-- .../customer_pages/customer_main_page.dart | 6 -- .../customer_pages/customer_search_page.dart | 6 -- lib/pages/list_stocks_page.dart | 2 - lib/pages/main_page.dart | 16 ++--- lib/pages/register_page.dart | 4 -- lib/tables/ref_generic_names.dart | 9 --- lib/tables/ref_manufactorers.dart | 36 +++++++--- lib/tables/ref_medicines.dart | 58 ++++++++++------ lib/tables/ref_types.dart | 25 +++++-- lib/tables/stocks.dart | 68 ++++++++++++------- lib/tables/storage.dart | 58 +++++----------- lib/widgets/datepicker_widget.dart | 3 +- lib/widgets/menu_widget.dart | 3 +- 24 files changed, 290 insertions(+), 257 deletions(-) create mode 100644 lib/functions/checkexisting_function.dart diff --git a/android/app/.cxx/Debug/k6q1g3c4/arm64-v8a/configure_fingerprint.bin b/android/app/.cxx/Debug/k6q1g3c4/arm64-v8a/configure_fingerprint.bin index 058aa0a..bb26302 100644 --- a/android/app/.cxx/Debug/k6q1g3c4/arm64-v8a/configure_fingerprint.bin +++ b/android/app/.cxx/Debug/k6q1g3c4/arm64-v8a/configure_fingerprint.bin @@ -2,27 +2,27 @@ C/C++ Structured Logz x v/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/arm64-v8a/additional_project_files.txtC A -?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  ߶2  2w +?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  Ɖ2  2w u -s/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/arm64-v8a/android_gradle_build.json  ߶2 Ǖ2| +s/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/arm64-v8a/android_gradle_build.json  Ɖ2 Ǖ2| z -x/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/arm64-v8a/android_gradle_build_mini.json  ߶2 򕂎2i +x/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/arm64-v8a/android_gradle_build_mini.json  Ɖ2 򕂎2i g -e/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/arm64-v8a/build.ninja  ට2 2m +e/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/arm64-v8a/build.ninja  Ɖ2 2m k -i/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/arm64-v8a/build.ninja.txt  ට2r +i/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/arm64-v8a/build.ninja.txt  Ɖ2r p -n/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/arm64-v8a/build_file_index.txt  ට2 ^ 2s +n/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/arm64-v8a/build_file_index.txt  Ɖ2 ^ 2s q -o/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/arm64-v8a/compile_commands.json  ට2w +o/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/arm64-v8a/compile_commands.json  lj2w u -s/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/arm64-v8a/compile_commands.json.bin  ට2 } +s/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/arm64-v8a/compile_commands.json.bin  lj2 } { -y/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/arm64-v8a/metadata_generation_command.txt  ට2 +y/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/arm64-v8a/metadata_generation_command.txt  lj2  2p n -l/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/arm64-v8a/prefab_config.json  ට2  ( 2u +l/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/arm64-v8a/prefab_config.json  lj2  ( 2u s -q/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/arm64-v8a/symbol_folder_index.txt  ට2  h 2b +q/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/arm64-v8a/symbol_folder_index.txt  lj2  h 2b ` -^/home/patrick/fvm/versions/3.29.0/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt  ට2  ȼ2 \ No newline at end of file +^/home/patrick/fvm/versions/3.29.0/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt  lj2  ȼ2 \ No newline at end of file diff --git a/android/app/.cxx/Debug/k6q1g3c4/armeabi-v7a/configure_fingerprint.bin b/android/app/.cxx/Debug/k6q1g3c4/armeabi-v7a/configure_fingerprint.bin index b785511..c133c0d 100644 --- a/android/app/.cxx/Debug/k6q1g3c4/armeabi-v7a/configure_fingerprint.bin +++ b/android/app/.cxx/Debug/k6q1g3c4/armeabi-v7a/configure_fingerprint.bin @@ -2,27 +2,27 @@ C/C++ Structured Log| z x/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/armeabi-v7a/additional_project_files.txtC A -?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  ÷2  2y +?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  ͉2  2y w -u/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/armeabi-v7a/android_gradle_build.json  ÷2 2~ +u/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/armeabi-v7a/android_gradle_build.json  ͉2 2~ | -z/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/armeabi-v7a/android_gradle_build_mini.json  ÷2 2k +z/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/armeabi-v7a/android_gradle_build_mini.json  ͉2 2k i -g/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/armeabi-v7a/build.ninja  ÷2 2o +g/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/armeabi-v7a/build.ninja  ͉2 2o m -k/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/armeabi-v7a/build.ninja.txt  ÷2t +k/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/armeabi-v7a/build.ninja.txt  ͉2t r -p/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/armeabi-v7a/build_file_index.txt  ÷2 ^ 2u +p/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/armeabi-v7a/build_file_index.txt  ͉2 ^ 2u s -q/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/armeabi-v7a/compile_commands.json  ÷2y +q/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/armeabi-v7a/compile_commands.json  ͉2y w -u/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/armeabi-v7a/compile_commands.json.bin  ÷2  +u/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/armeabi-v7a/compile_commands.json.bin  ͉2  } -{/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/armeabi-v7a/metadata_generation_command.txt  ÷2 +{/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/armeabi-v7a/metadata_generation_command.txt  ͉2  2r p -n/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/armeabi-v7a/prefab_config.json  ÷2  ( 2w +n/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/armeabi-v7a/prefab_config.json  ͉2  ( 2w u -s/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/armeabi-v7a/symbol_folder_index.txt  ķ2  j 2b +s/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/armeabi-v7a/symbol_folder_index.txt  ͉2  j 2b ` -^/home/patrick/fvm/versions/3.29.0/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt  ķ2  ȼ2 \ No newline at end of file +^/home/patrick/fvm/versions/3.29.0/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt  ͉2  ȼ2 \ No newline at end of file diff --git a/android/app/.cxx/Debug/k6q1g3c4/x86/configure_fingerprint.bin b/android/app/.cxx/Debug/k6q1g3c4/x86/configure_fingerprint.bin index 24010ea..600f4c8 100644 --- a/android/app/.cxx/Debug/k6q1g3c4/x86/configure_fingerprint.bin +++ b/android/app/.cxx/Debug/k6q1g3c4/x86/configure_fingerprint.bin @@ -2,27 +2,27 @@ C/C++ Structured Logt r p/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/x86/additional_project_files.txtC A -?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  2  2q +?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  ԉ2  2q o -m/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/x86/android_gradle_build.json  2 2v +m/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/x86/android_gradle_build.json  ԉ2 2v t -r/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/x86/android_gradle_build_mini.json  2 2c +r/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/x86/android_gradle_build_mini.json  ԉ2 2c a -_/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/x86/build.ninja  2 2g +_/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/x86/build.ninja  ԉ2 2g e -c/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/x86/build.ninja.txt  2l +c/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/x86/build.ninja.txt  ԉ2l j -h/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/x86/build_file_index.txt  2 ^ 2m +h/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/x86/build_file_index.txt  ԉ2 ^ 2m k -i/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/x86/compile_commands.json  2q +i/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/x86/compile_commands.json  ԉ2q o -m/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/x86/compile_commands.json.bin  2 w +m/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/x86/compile_commands.json.bin  ԉ2 w u -s/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/x86/metadata_generation_command.txt  2 +s/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/x86/metadata_generation_command.txt  ԉ2  2j h -f/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/x86/prefab_config.json  2  ( 2o +f/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/x86/prefab_config.json  ԉ2  ( 2o m -k/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/x86/symbol_folder_index.txt  2  b 2b +k/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/x86/symbol_folder_index.txt  ԉ2  b 2b ` -^/home/patrick/fvm/versions/3.29.0/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt  2  ȼ2 \ No newline at end of file +^/home/patrick/fvm/versions/3.29.0/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt  ԉ2  ȼ2 \ No newline at end of file diff --git a/android/app/.cxx/Debug/k6q1g3c4/x86_64/configure_fingerprint.bin b/android/app/.cxx/Debug/k6q1g3c4/x86_64/configure_fingerprint.bin index bc71260..d3eb45c 100644 --- a/android/app/.cxx/Debug/k6q1g3c4/x86_64/configure_fingerprint.bin +++ b/android/app/.cxx/Debug/k6q1g3c4/x86_64/configure_fingerprint.bin @@ -2,27 +2,27 @@ C/C++ Structured Logw u s/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/x86_64/additional_project_files.txtC A -?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  2  2t +?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  ݉2  2t r -p/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/x86_64/android_gradle_build.json  2 2y +p/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/x86_64/android_gradle_build.json  ݉2 2y w -u/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/x86_64/android_gradle_build_mini.json  2 2f +u/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/x86_64/android_gradle_build_mini.json  ݉2 2f d -b/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/x86_64/build.ninja  2 2j +b/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/x86_64/build.ninja  ݉2 2j h -f/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/x86_64/build.ninja.txt  2o +f/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/x86_64/build.ninja.txt  ݉2o m -k/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/x86_64/build_file_index.txt  2 ^ 2p +k/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/x86_64/build_file_index.txt  ݉2 ^ 2p n -l/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/x86_64/compile_commands.json  2t +l/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/x86_64/compile_commands.json  ݉2t r -p/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/x86_64/compile_commands.json.bin  2 z +p/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/x86_64/compile_commands.json.bin  ݉2 z x -v/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/x86_64/metadata_generation_command.txt  2 +v/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/x86_64/metadata_generation_command.txt  ݉2  2m k -i/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/x86_64/prefab_config.json  2  ( 2r +i/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/x86_64/prefab_config.json  ݉2  ( 2r p -n/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/x86_64/symbol_folder_index.txt  2  e 2b +n/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/Debug/k6q1g3c4/x86_64/symbol_folder_index.txt  ݉2  e 2b ` -^/home/patrick/fvm/versions/3.29.0/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt  2  ȼ2 \ No newline at end of file +^/home/patrick/fvm/versions/3.29.0/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt  ݉2  ȼ2 \ No newline at end of file diff --git a/lib/functions/checkexisting_function.dart b/lib/functions/checkexisting_function.dart new file mode 100644 index 0000000..8ca0d86 --- /dev/null +++ b/lib/functions/checkexisting_function.dart @@ -0,0 +1,10 @@ +import 'package:flutter/widgets.dart'; + +Future checkExisting(dynamic table, TextEditingController controller) async { + try { + final uuid = await table.getUUID(controller.text); + return uuid.isNotEmpty; + } catch (e) { + return false; + } +} diff --git a/lib/pages/add_generics_page.dart b/lib/pages/add_generics_page.dart index 417f334..1926c86 100644 --- a/lib/pages/add_generics_page.dart +++ b/lib/pages/add_generics_page.dart @@ -1,5 +1,3 @@ -import 'dart:developer'; - import 'package:gap/gap.dart'; import 'package:flutter/material.dart'; import 'package:internet_connection_checker/internet_connection_checker.dart'; @@ -7,7 +5,6 @@ import 'package:pharmacy_mobile/tables/ref_categories.dart'; import 'package:pharmacy_mobile/tables/ref_generic_names.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/form_border_widget2.dart'; import 'package:pharmacy_mobile/widgets/input_widget.dart'; import 'package:pharmacy_mobile/widgets/page_background_widget.dart'; @@ -91,8 +88,6 @@ class _AddGenericsPageState extends State { } _categoryUUID = await _refCategories.getUUID(_selectedCategory); - log('_selectedCategory: $_selectedCategory'); - log('_categoryUUID: $_categoryUUID'); final post = await _refGenericNames.postGeneric(_nameController.text, _categoryUUID); diff --git a/lib/pages/add_manufactorer.dart b/lib/pages/add_manufactorer.dart index 0f66b26..f4742c7 100644 --- a/lib/pages/add_manufactorer.dart +++ b/lib/pages/add_manufactorer.dart @@ -1,10 +1,14 @@ import 'package:flutter/material.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/functions/checkexisting_function.dart'; +import 'package:pharmacy_mobile/tables/ref_manufactorers.dart'; import 'package:pharmacy_mobile/widgets/button_widget.dart'; import 'package:pharmacy_mobile/widgets/form_border_widget2.dart'; import 'package:pharmacy_mobile/widgets/input_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'; @@ -19,17 +23,45 @@ class _AddManufactorerPageState extends State { final _formKey = GlobalKey(); final _nameController = TextEditingController(); final _addressController = TextEditingController(); + final _refManufactorers = RefManufactorers(); late bool _isLoading = false; - void saveManufactorer() async { + void _saveManufactorer() async { setState(() => _isLoading = true); - if (await InternetConnectionChecker.instance.hasConnection) { - // final existing = await _checkExisting(); - } + try { + if (await InternetConnectionChecker.instance.hasConnection) { + final existing = await checkExisting(_refManufactorers, _nameController); - setState(() => _isLoading = false); + if (existing && mounted) { + showNotification(context, 'Manufactorer already listed', false); + return; + } + + final post = await _refManufactorers.postManufactorer(_nameController.text, _addressController.text); + + if (post && mounted) { + showNotification(context, 'Manufactorer added to list', true); + + WidgetsBinding.instance.addPostFrameCallback((_) { + if (mounted) { + context.push('/main'); + } + }); + } + } else { + if (mounted) { + showNotification(context, 'Error: No Internet Connection', false); + } + } + } catch (e) { + if (mounted) { + showNotification(context, 'Error: $e', false); + } + } finally { + setState(() => _isLoading = false); + } } @override @@ -71,7 +103,7 @@ class _AddManufactorerPageState extends State { if (_isLoading) const Center(child: CircularProgressIndicator(color: Colors.white)) else - ButtonWidget(text: 'Add', onPressed: saveManufactorer) + ButtonWidget(text: 'Save Manufactorer', onPressed: _saveManufactorer) ], ))) ], diff --git a/lib/pages/add_medicine_page.dart b/lib/pages/add_medicine_page.dart index 13d2893..745e250 100644 --- a/lib/pages/add_medicine_page.dart +++ b/lib/pages/add_medicine_page.dart @@ -1,8 +1,4 @@ -import 'dart:convert'; -import 'dart:developer'; -import 'dart:io'; import 'dart:typed_data'; - import 'package:flutter/material.dart'; import 'package:gap/gap.dart'; import 'package:image_picker/image_picker.dart'; @@ -60,33 +56,6 @@ class _AddMedicinePageState extends State { late bool imageUploaded = false; late String imageUrl = ''; - // void _checkResult(List list, String name) { - // if (list.isEmpty) { - // if (mounted) { - // showNotification(context, 'Error: No $name Found', false); - - // WidgetsBinding.instance.addPostFrameCallback((_) { - // if (mounted) { - // context.push('/main'); - // } - // }); - // } - // } else { - // setState(() => {}); - // } - // } - - // Future compressFile(XFile file) async { - // var result = await FlutterImageCompress.compressWithFile( - // file.path, - // minWidth: 1020, - // minHeight: 765, - // quality: 90, - // format: CompressFormat.webp, - // ); - // return result; - // } - Future _getGenerics() async { _genericNameList = await _refGenericNames.getList(); setState(() { @@ -199,15 +168,16 @@ class _AddMedicinePageState extends State { final imageBytes = await image!.readAsBytes(); final webpImage = await _webpConvert(imageBytes); + late bool uploaded = false; uuid = imageName; if (mounted) { - imageUrl = await _storage.uploadImage(context, storageName, webpImage, '$imageName.webp'); + uploaded = await _storage.uploadImage(context, storageName, webpImage, '$imageName.webp'); } setState(() { - if (imageUrl.isEmpty) { + if (!uploaded) { if (mounted) { showNotification(context, 'Image Upload failed, try again.', false); } @@ -218,8 +188,6 @@ class _AddMedicinePageState extends State { Future _webpConvert(Uint8List file) async { final result = await FlutterImageCompress.compressWithList( file, - // minHeight: 1080, - // minWidth: 1080, quality: 70, rotate: 0, keepExif: false, diff --git a/lib/pages/add_stock_page.dart b/lib/pages/add_stock_page.dart index a7b88cc..c4b53c3 100644 --- a/lib/pages/add_stock_page.dart +++ b/lib/pages/add_stock_page.dart @@ -1,12 +1,8 @@ -import 'dart:developer'; - import 'package:flutter/material.dart'; -import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:gap/gap.dart'; import 'package:internet_connection_checker/internet_connection_checker.dart'; import 'package:pharmacy_mobile/functions/barcode_scan_function.dart'; import 'package:pharmacy_mobile/functions/checkresult_function.dart'; -import 'package:pharmacy_mobile/security/encryption.dart'; import 'package:pharmacy_mobile/tables/ref_medicines.dart'; import 'package:pharmacy_mobile/tables/stocks.dart'; import 'package:pharmacy_mobile/widgets/button_widget.dart'; @@ -20,7 +16,6 @@ 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:go_router/go_router.dart'; -import 'package:simple_barcode_scanner/simple_barcode_scanner.dart'; class AddStockPage extends StatefulWidget { const AddStockPage({super.key}); @@ -34,18 +29,16 @@ class _AddStockPageState extends State with WidgetsBindingObserver final _refMedicines = RefMedicines(); final _quantityController = TextEditingController(); final _dateController = TextEditingController(); - final _medicineController = TextEditingController(); final _stocks = Stocks(); - final bool _isLoading = false; - + late bool _isLoading = false; late List _medicineList = []; late String _selectedMedicine = ''; late DateTime selectedDate = DateTime.now(); late String barcode = ''; void _getMedicines() async { - _medicineList = await _refMedicines.getList2(); + _medicineList = await _refMedicines.getList(); setState(() { checkResult(context, _medicineList, 'Medicines'); @@ -71,11 +64,27 @@ class _AddStockPageState extends State with WidgetsBindingObserver } void _saveStock() async { - final stockNameUUID = await _refMedicines.getUUID(_selectedMedicine); - final stockQuantity = _quantityController.text; - final stockExpiration = _dateController.text; + setState(() => _isLoading = true); - await _stocks.postStock(stockNameUUID, stockExpiration, stockQuantity); + try { + if (await InternetConnectionChecker.instance.hasConnection) { + final stockNameUUID = await _refMedicines.getUUID(_selectedMedicine); + final stockQuantity = _quantityController.text; + final stockExpiration = _dateController.text; + + await _stocks.postStock(stockNameUUID, stockExpiration, stockQuantity); + } else { + if (mounted) { + showNotification(context, 'Error: No Internet Connection', false); + } + } + } catch (e) { + if (mounted) { + showNotification(context, 'Error: $e', false); + } + } finally { + setState(() => _isLoading = false); + } } Future _scanBarcode() async { @@ -188,12 +197,10 @@ class _AddStockPageState extends State with WidgetsBindingObserver value: selectedDate, ), const Gap(32), - ButtonWidget(text: 'Add Stock', onPressed: _saveStock), - const Gap(16), - TextWidget( - text: barcode, - size: 14, - ) + if (_isLoading) + const Center(child: CircularProgressIndicator(color: Colors.white)) + else + ButtonWidget(text: 'Add Stock', onPressed: _saveStock), ], ), ), diff --git a/lib/pages/add_type_page.dart b/lib/pages/add_type_page.dart index 94895a7..b1de282 100644 --- a/lib/pages/add_type_page.dart +++ b/lib/pages/add_type_page.dart @@ -3,10 +3,8 @@ import 'package:flutter/material.dart'; import 'package:internet_connection_checker/internet_connection_checker.dart'; import 'package:pharmacy_mobile/tables/ref_types.dart'; import 'package:pharmacy_mobile/widgets/button_widget.dart'; -import 'package:pharmacy_mobile/widgets/form_border_widget.dart'; import 'package:pharmacy_mobile/widgets/form_border_widget2.dart'; import 'package:pharmacy_mobile/widgets/input_widget.dart'; -import 'package:pharmacy_mobile/widgets/logo_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'; diff --git a/lib/pages/customer_pages/customer_itemview_page.dart b/lib/pages/customer_pages/customer_itemview_page.dart index 1fa330b..aa0cc7c 100644 --- a/lib/pages/customer_pages/customer_itemview_page.dart +++ b/lib/pages/customer_pages/customer_itemview_page.dart @@ -1,5 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:pharmacy_mobile/tables/storage.dart'; import 'package:pharmacy_mobile/widgets/page_background_widget.dart'; class CustomerItemviewPage extends StatelessWidget { @@ -7,13 +6,13 @@ class CustomerItemviewPage extends StatelessWidget { @override Widget build(BuildContext context) { - final storage = Storage(); + // final storage = Storage(); - void getURL() async { - final image = await storage.getPublicURL('ref_medicines_images', 'cb6eafdb-d86f-460a-9571-44446570d4cb.webp'); - // setState(() { - // imageUrl = image; - } + // void getURL() async { + // final image = await storage.getPublicURL('ref_medicines_images', 'cb6eafdb-d86f-460a-9571-44446570d4cb.webp'); + // // setState(() { + // // imageUrl = image; + // } return Scaffold( body: PageBackgroundWidget( diff --git a/lib/pages/customer_pages/customer_main_page.dart b/lib/pages/customer_pages/customer_main_page.dart index e912735..e64b6e7 100644 --- a/lib/pages/customer_pages/customer_main_page.dart +++ b/lib/pages/customer_pages/customer_main_page.dart @@ -1,15 +1,9 @@ import 'package:flutter/material.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/consultation_widget.dart'; import 'package:pharmacy_mobile/widgets/logo_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:go_router/go_router.dart'; class CustomerMainPage extends StatefulWidget { // final NotchBottomBarController? controller; diff --git a/lib/pages/customer_pages/customer_search_page.dart b/lib/pages/customer_pages/customer_search_page.dart index 1b70f84..344d8b7 100644 --- a/lib/pages/customer_pages/customer_search_page.dart +++ b/lib/pages/customer_pages/customer_search_page.dart @@ -1,17 +1,11 @@ -import 'dart:developer'; - import 'package:flutter/material.dart'; import 'package:gap/gap.dart'; -import 'package:pharmacy_mobile/tables/ref_medicines.dart'; import 'package:pharmacy_mobile/tables/stocks.dart'; import 'package:pharmacy_mobile/tables/storage.dart'; -import 'package:pharmacy_mobile/widgets/button_widget.dart'; import 'package:pharmacy_mobile/widgets/input_widget.dart'; import 'package:pharmacy_mobile/widgets/item_card_widget.dart'; import 'package:pharmacy_mobile/widgets/logo_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'; class CustomerSearchPage extends StatefulWidget { // final NotchBottomBarController? controller; diff --git a/lib/pages/list_stocks_page.dart b/lib/pages/list_stocks_page.dart index 3882b56..9ead477 100644 --- a/lib/pages/list_stocks_page.dart +++ b/lib/pages/list_stocks_page.dart @@ -1,6 +1,5 @@ import 'package:flutter/material.dart'; import 'package:gap/gap.dart'; -import 'package:google_fonts/google_fonts.dart'; import 'package:intl/intl.dart'; import 'package:pharmacy_mobile/tables/stocks.dart'; import 'package:pharmacy_mobile/tables/storage.dart'; @@ -18,7 +17,6 @@ class ListStocksPage extends StatefulWidget { class _ListStocksPageState extends State { final _stocks = Stocks(); - final _storage = Storage(); late List _stockList = []; bool _isLoading = false; diff --git a/lib/pages/main_page.dart b/lib/pages/main_page.dart index a03b4ff..460cfb2 100644 --- a/lib/pages/main_page.dart +++ b/lib/pages/main_page.dart @@ -53,7 +53,7 @@ class _MainPageState extends State { MenuWidget( icon: FontAwesomeIcons.circlePlus, text: 'Add Manufactorer', - description: 'Add Manufactorer to the record', + description: 'Register manufactorer to the list', onPressed: () => {context.push('/addmanufactorer')}, color: 'blue', ), @@ -61,7 +61,7 @@ class _MainPageState extends State { MenuWidget( icon: FontAwesomeIcons.circlePlus, text: 'Add Type', - description: 'Create a new medical type', + description: 'Register new medical type', onPressed: () => {context.push('/addtype')}, color: 'blue', ), @@ -69,7 +69,7 @@ class _MainPageState extends State { MenuWidget( icon: FontAwesomeIcons.circlePlus, text: 'Add Category', - description: 'Create a new medicine category', + description: 'Register new medicine category', onPressed: () => {context.push('/addcategory')}, color: 'blue', ), @@ -77,35 +77,35 @@ class _MainPageState extends State { MenuWidget( icon: FontAwesomeIcons.circlePlus, text: 'Add Generics', - description: 'Add generic name on the list', + description: 'Register generic name', onPressed: () => {context.push('/addgenerics')}, color: 'blue'), const Gap(32), MenuWidget( icon: FontAwesomeIcons.circlePlus, text: 'Add Medicine', - description: 'Add generic name on the list', + 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 generic name on the list', + description: 'Add a new stock', onPressed: () => {context.push('/addstock')}, color: 'green'), const Gap(32), MenuWidget( icon: Icons.delete, text: 'Remove Stock', - description: 'Add generic name on the list', + description: 'Reduce stock based on purchase', onPressed: () => {context.push('/deletestock')}, color: 'red'), const Gap(32), MenuWidget( icon: FontAwesomeIcons.listCheck, text: 'List of Stocks', - description: 'Add generic name on the list', + description: 'View the list of available stocks', onPressed: () => {context.push('/liststocks')}, color: 'yellow'), const Gap(40), diff --git a/lib/pages/register_page.dart b/lib/pages/register_page.dart index c43ac1e..62be2aa 100644 --- a/lib/pages/register_page.dart +++ b/lib/pages/register_page.dart @@ -1,12 +1,9 @@ -import 'dart:developer'; - import 'package:flutter/material.dart'; import 'package:gap/gap.dart'; import 'package:internet_connection_checker/internet_connection_checker.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/logo_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'; @@ -35,7 +32,6 @@ class _RegisterPageState extends State { final confirmPassword = _confirmPasswordController.text; if (email.isEmpty) { - log('message'); if (mounted) { showNotification(context, 'Error: Please enter a valid email', false); } diff --git a/lib/tables/ref_generic_names.dart b/lib/tables/ref_generic_names.dart index 02abfc6..d718081 100644 --- a/lib/tables/ref_generic_names.dart +++ b/lib/tables/ref_generic_names.dart @@ -44,13 +44,4 @@ class RefGenericNames { return false; } } - - Future getSample() async { - try { - final data = await _supabase.from('ref_generic_names').select('''generic_name, ref_categories(category_name)'''); - return data.toList(); - } catch (e) { - return []; - } - } } diff --git a/lib/tables/ref_manufactorers.dart b/lib/tables/ref_manufactorers.dart index 76ebd00..b789739 100644 --- a/lib/tables/ref_manufactorers.dart +++ b/lib/tables/ref_manufactorers.dart @@ -1,21 +1,41 @@ import 'package:supabase_flutter/supabase_flutter.dart'; +import 'package:uuid/uuid.dart'; class RefManufactorers { final SupabaseClient _supabase = Supabase.instance.client; Future getList() async { - final data = await _supabase - .from('ref_manufactorers') - .select('manufactorer_name') - .order('manufactorer_name', ascending: true); - return data.toList(); + try { + final data = await _supabase + .from('ref_manufactorers') + .select('manufactorer_name') + .order('manufactorer_name', ascending: true); + return data.toList(); + } catch (e) { + return []; + } } Future getUUID(String name) async { - final data = - await _supabase.from('ref_manufactorers').select('ref_manufactorers_uuid').eq('manufactorer_name', name); - return data.first['ref_manufactorers_uuid'].toString(); + try { + final data = + await _supabase.from('ref_manufactorers').select('ref_manufactorers_uuid').eq('manufactorer_name', name); + return data.first['ref_manufactorers_uuid'].toString(); + } catch (e) { + return ''; + } } + Future postManufactorer(String name, String address) async { + try { + final genericUUID = Uuid().v4(); + await _supabase + .from('ref_manufactorers') + .insert({'ref_manufactorers_uuid': genericUUID, 'manufactorer_name': name, 'manufactorer_address': address}); + return true; + } catch (e) { + return false; + } + } } diff --git a/lib/tables/ref_medicines.dart b/lib/tables/ref_medicines.dart index dd1fdc9..cb5c86e 100644 --- a/lib/tables/ref_medicines.dart +++ b/lib/tables/ref_medicines.dart @@ -4,37 +4,48 @@ class RefMedicines { final SupabaseClient _supabase = Supabase.instance.client; Future getList() async { - final data = await _supabase.from('ref_medicines').select('medicine_name').order('medicine_name', ascending: true); - return data.toList(); - } - - Future getList2() async { - final data = await _supabase - .from('ref_medicines') - .select('medicine_name, ref_manufactorers(manufactorer_name)') - .order('medicine_name', ascending: true); - return data.toList(); + try { + final data = await _supabase + .from('ref_medicines') + .select('medicine_name, ref_manufactorers(manufactorer_name)') + .order('medicine_name', ascending: true); + return data.toList(); + } catch (e) { + return []; + } } Future getListWithUUID() async { - final data = await _supabase - .from('ref_medicines') - .select('ref_medicines_uuid, medicine_name') - .order('medicine_name', ascending: true); - return data.toList(); + try { + final data = await _supabase + .from('ref_medicines') + .select('ref_medicines_uuid, medicine_name') + .order('medicine_name', ascending: true); + return data.toList(); + } catch (e) { + return []; + } } Future getUUID(String name) async { - final data = await _supabase.from('ref_medicines').select('ref_medicines_uuid').eq('medicine_name', name); - return data.first['ref_medicines_uuid']; + try { + final data = await _supabase.from('ref_medicines').select('ref_medicines_uuid').eq('medicine_name', name); + return data.first['ref_medicines_uuid']; + } catch (e) { + return ''; + } } Future getBarcode(String name) async { - final data = await _supabase.from('ref_medicines').select('barcode').eq('medicine_name', name); - return data.first['barcode']; + try { + final data = await _supabase.from('ref_medicines').select('barcode').eq('medicine_name', name); + return data.first['barcode']; + } catch (e) { + return ''; + } } - Future postMedicine(String uuid, String name, String muuid, String guuid, String tuuid, String barcode) async { + Future postMedicine(String uuid, String name, String muuid, String guuid, String tuuid, String barcode) async { final medicine = { 'ref_medicines_uuid': uuid, 'medicine_name': name, @@ -44,6 +55,11 @@ class RefMedicines { 'barcode': barcode }; - await _supabase.from('ref_medicines').insert(medicine); + try { + await _supabase.from('ref_medicines').insert(medicine); + return true; + } catch (e) { + return false; + } } } diff --git a/lib/tables/ref_types.dart b/lib/tables/ref_types.dart index 67debd1..e2dfaee 100644 --- a/lib/tables/ref_types.dart +++ b/lib/tables/ref_types.dart @@ -5,18 +5,31 @@ class RefTypes { final SupabaseClient _supabase = Supabase.instance.client; Future getList() async { - final data = await _supabase.from('ref_types').select('type_name').order('type_name', ascending: true); - return data.toList(); + try { + final data = await _supabase.from('ref_types').select('type_name').order('type_name', ascending: true); + return data.toList(); + } catch (e) { + return []; + } } Future getUUID(String name) async { - final data = await _supabase.from('ref_types').select('ref_types_uuid').eq('type_name', name); - return data.first['ref_types_uuid'].toString(); + try { + final data = await _supabase.from('ref_types').select('ref_types_uuid').eq('type_name', name); + return data.first['ref_types_uuid'].toString(); + } catch (e) { + return ''; + } } - Future postType(String name) async { + Future postType(String name) async { final typeUUID = Uuid().v4(); - await _supabase.from('ref_types').insert({'ref_types_uuid': typeUUID, 'type_name': name}); + try { + await _supabase.from('ref_types').insert({'ref_types_uuid': typeUUID, 'type_name': name}); + return true; + } catch (e) { + return false; + } } } diff --git a/lib/tables/stocks.dart b/lib/tables/stocks.dart index ff4439e..1f5013c 100644 --- a/lib/tables/stocks.dart +++ b/lib/tables/stocks.dart @@ -9,31 +9,39 @@ class Stocks { Future getList() async { List> stockData = []; - final data = - await _supabase.from('stocks').select('ref_medicines(medicine_name), expiration_date, quantity, price'); + try { + final data = + await _supabase.from('stocks').select('ref_medicines(medicine_name), expiration_date, quantity, price'); - for (var item in data) { - stockData.add({ - 'medicine_name': item['ref_medicines']['medicine_name'], - 'quantity': item['quantity'].toString(), - 'expiration_date': item['expiration_date'], - 'price': item['price'], - }); + for (var item in data) { + stockData.add({ + 'medicine_name': item['ref_medicines']['medicine_name'], + 'quantity': item['quantity'].toString(), + 'expiration_date': item['expiration_date'], + 'price': item['price'], + }); + } + + return stockData; + } catch (e) { + return []; } - - return stockData; } Future getUUID(String name) async { - final medUUID = await _supabase.from('ref_medicines').select('ref_medicines_uuid').eq('medicine_name', name); - final data = await _supabase - .from('stocks') - .select('stocks_uuid') - .eq('ref_medicines_uuid', medUUID.first['ref_medicines_uuid']); - return data.first['stocks_uuid'].toString(); + try { + final medUUID = await _supabase.from('ref_medicines').select('ref_medicines_uuid').eq('medicine_name', name); + final data = await _supabase + .from('stocks') + .select('stocks_uuid') + .eq('ref_medicines_uuid', medUUID.first['ref_medicines_uuid']); + return data.first['stocks_uuid'].toString(); + } catch (e) { + return ''; + } } - Future postStock(String muuid, String name, String quantity) async { + Future postStock(String muuid, String name, String quantity) async { final uuid = Uuid().v4(); final stock = { @@ -43,15 +51,29 @@ class Stocks { 'quantity': quantity, }; - await _supabase.from('stocks').insert(stock); + try { + await _supabase.from('stocks').insert(stock); + return true; + } catch (e) { + return false; + } } Future getQuantity(String uuid) async { - final data = await _supabase.from('stocks').select('quantity').eq('stocks_uuid', uuid); - return data.first['quantity'].toString(); + try { + final data = await _supabase.from('stocks').select('quantity').eq('stocks_uuid', uuid); + return data.first['quantity'].toString(); + } catch (e) { + return ''; + } } - Future updateStock(String uuid, String column, String value) async { - await _supabase.from('stocks').update({column: value}).eq('stocks_uuid', uuid).select(); + Future updateStock(String uuid, String column, String value) async { + try { + await _supabase.from('stocks').update({column: value}).eq('stocks_uuid', uuid).select(); + return true; + } catch (e) { + return false; + } } } diff --git a/lib/tables/storage.dart b/lib/tables/storage.dart index 4161f46..0d6eb0b 100644 --- a/lib/tables/storage.dart +++ b/lib/tables/storage.dart @@ -1,69 +1,47 @@ -import 'dart:convert'; -import 'dart:developer'; -import 'dart:io'; import 'dart:typed_data'; import 'package:flutter/material.dart'; -import 'package:image_picker/image_picker.dart'; -import 'package:pharmacy_mobile/widgets/snackbar_widget.dart'; import 'package:supabase_flutter/supabase_flutter.dart'; class Storage { final SupabaseClient _supabase = Supabase.instance.client; - Future createBucket(String name) async { + Future createBucket(String name) async { try { final response = await _supabase.storage.createBucket(name); - return response; - } catch (e, stackTrace) { - log('Error creating bucket: $e', stackTrace: stackTrace); - rethrow; - } - } - - Future getList() async { - try { - final response = await _supabase.storage.listBuckets(); - return response; - } catch (e, stackTrace) { - log('Error getting list: $e', stackTrace: stackTrace); - rethrow; - } - } - - Future uploadFile(XFile image, String name) async { - try { - final imageString = await image.readAsString(encoding: utf8); - final imageFile = File(imageString); - await _supabase.storage.from('images').upload(name, imageFile); - log('upload Complete'); + return response.isNotEmpty; } catch (e) { - log('Error getting list: $e'); - rethrow; + return false; } } - Future uploadImage(BuildContext context, String storage, Uint8List image, String name) async { + Future uploadImage(BuildContext context, String storage, Uint8List image, String name) async { try { final imageBytes = image; final imagePath = name; await _supabase.storage.from(storage).uploadBinary(imagePath, imageBytes); final imageUrl = _supabase.storage.from(storage).getPublicUrl(imagePath); - return imageUrl; + return imageUrl.isNotEmpty; } catch (e) { - // ignore: use_build_context_synchronously - showNotification(context, 'Error uploading image: $e', false); - rethrow; + return false; } } Future downloadImage(String storage, String name) async { - final Uint8List file = await _supabase.storage.from(storage).download(name); - return file; + try { + final Uint8List file = await _supabase.storage.from(storage).download(name); + return file; + } catch (e) { + return Uint8List(0); + } } Future getPublicURL(String storage, String name) async { - final String file = _supabase.storage.from(storage).getPublicUrl(name); - return file; + try { + final String file = _supabase.storage.from(storage).getPublicUrl(name); + return file; + } catch (e) { + return ''; + } } } diff --git a/lib/widgets/datepicker_widget.dart b/lib/widgets/datepicker_widget.dart index 62cb27a..1f6726f 100644 --- a/lib/widgets/datepicker_widget.dart +++ b/lib/widgets/datepicker_widget.dart @@ -3,10 +3,11 @@ import 'package:google_fonts/google_fonts.dart'; import 'package:gap/gap.dart'; import 'package:intl/intl.dart'; +// ignore: must_be_immutable class DatePickerWidget extends StatefulWidget { final String label; final TextEditingController controller; - DateTime value; + late DateTime value; DatePickerWidget({super.key, required this.label, required this.controller, required this.value}); diff --git a/lib/widgets/menu_widget.dart b/lib/widgets/menu_widget.dart index 3fdb86d..8d8377d 100644 --- a/lib/widgets/menu_widget.dart +++ b/lib/widgets/menu_widget.dart @@ -35,7 +35,8 @@ class MenuWidget extends StatelessWidget { const Color.fromRGBO(104, 156, 59, 0.8), ]; - MenuWidget({super.key, required this.text, required this.description, this.icon, this.onPressed, this.color, this.width}); + MenuWidget( + {super.key, required this.text, required this.description, this.icon, this.onPressed, this.color, this.width}); @override Widget build(BuildContext context) {