This commit is contained in:
Patrick Alvin Alcala 2025-02-25 17:22:13 +08:00
parent 11fc5c43bf
commit 41651ae447
13 changed files with 237 additions and 125 deletions

View file

@ -2,27 +2,27 @@ C/C++ Structured Log
<EFBFBD> <EFBFBD>
/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/arm64-v8a/additional_project_files.txtC /home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/arm64-v8a/additional_project_files.txtC
A A
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  Úÿ¥ÝÓ2  ¢í‡<C3AD>Ñ2€ ?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  ¬¢ìßÓ2  ¢í‡<C3AD>Ñ2€
~ ~
|/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/arm64-v8a/android_gradle_build.json  Úÿ¥ÝÓ2ß £í‡<C3AD>Ñ2‡ |/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/arm64-v8a/android_gradle_build.json  ¬¢ìßÓ2ß £í‡<C3AD>Ñ2‡
 
<EFBFBD>/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/arm64-v8a/android_gradle_build_mini.json  Úÿ¥ÝÓ2ø £í‡<C3AD>Ñ2r <EFBFBD>/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/arm64-v8a/android_gradle_build_mini.json  ¬¢ìßÓ2ø £í‡<C3AD>Ñ2r
p p
n/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/arm64-v8a/build.ninja  Úÿ¥ÝÓ2ߺ —í‡<C3AD>Ñ2v n/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/arm64-v8a/build.ninja  ¬¢ìßÓ2ߺ —í‡<C3AD>Ñ2v
t t
r/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/arm64-v8a/build.ninja.txt  Úÿ¥ÝÓ2{ r/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/arm64-v8a/build.ninja.txt  ­¢ìßÓ2{
y y
w/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/arm64-v8a/build_file_index.txt  Úÿ¥ÝÓ2 ^ ¥í‡<C3AD>Ñ2| w/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/arm64-v8a/build_file_index.txt  ­¢ìßÓ2 ^ ¥í‡<C3AD>Ñ2|
z z
x/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/arm64-v8a/compile_commands.json  Úÿ¥ÝÓ2 x/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/arm64-v8a/compile_commands.json  ­¢ìßÓ2
~ ~
|/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/arm64-v8a/compile_commands.json.bin  Úÿ¥ÝÓ2 ˆ |/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/arm64-v8a/compile_commands.json.bin  ­¢ìßÓ2 ˆ
 
/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/arm64-v8a/metadata_generation_command.txt  Úÿ¥ÝÓ2 /home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/arm64-v8a/metadata_generation_command.txt  ­¢ìßÓ2
ç ¥í‡<C3AD>Ñ2y ç ¥í‡<C3AD>Ñ2y
w w
u/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/arm64-v8a/prefab_config.json  Úÿ¥ÝÓ2  ( ¥í‡<C3AD>Ñ2~ u/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/arm64-v8a/prefab_config.json  ­¢ìßÓ2  ( ¥í‡<C3AD>Ñ2~
| |
z/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/arm64-v8a/symbol_folder_index.txt  Úÿ¥ÝÓ2  q ¥í‡<C3AD>Ñ2b z/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/arm64-v8a/symbol_folder_index.txt  ­¢ìßÓ2  q ¥í‡<C3AD>Ñ2b
` `
^/home/patrick/fvm/versions/3.29.0/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt  Úÿ¥ÝÓ2 ¤ ˆÈ¼<C388>Ñ2 ^/home/patrick/fvm/versions/3.29.0/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt  ­¢ìßÓ2 ¤ ˆÈ¼<C388>Ñ2

View file

@ -2,27 +2,27 @@ C/C++ Structured Log
 
<EFBFBD>/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/armeabi-v7a/additional_project_files.txtC <EFBFBD>/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/armeabi-v7a/additional_project_files.txtC
A A
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  Þÿ¥ÝÓ2  ·ó‡<C3B3>Ñ2ƒ ?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  á¢ìßÓ2  ·ó‡<C3B3>Ñ2ƒ
 
~/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/armeabi-v7a/android_gradle_build.json  Þÿ¥ÝÓ2ã ¸ó‡<C3B3>Ñ2‰ ~/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/armeabi-v7a/android_gradle_build.json  á¢ìßÓ2ã ¸ó‡<C3B3>Ñ2‰
 
ƒ/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/armeabi-v7a/android_gradle_build_mini.json  Þÿ¥ÝÓ2ü ¸ó‡<C3B3>Ñ2t ƒ/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/armeabi-v7a/android_gradle_build_mini.json  á¢ìßÓ2ü ¸ó‡<C3B3>Ñ2t
r r
p/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/armeabi-v7a/build.ninja  Þÿ¥ÝÓ2éº …ó‡<C3B3>Ñ2x p/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/armeabi-v7a/build.ninja  á¢ìßÓ2éº …ó‡<C3B3>Ñ2x
v v
t/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/armeabi-v7a/build.ninja.txt  Þÿ¥ÝÓ2} t/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/armeabi-v7a/build.ninja.txt  á¢ìßÓ2}
{ {
y/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/armeabi-v7a/build_file_index.txt  Þÿ¥ÝÓ2 ^ ºó‡<C3B3>Ñ2~ y/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/armeabi-v7a/build_file_index.txt  á¢ìßÓ2 ^ ºó‡<C3B3>Ñ2~
| |
z/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/armeabi-v7a/compile_commands.json  Þÿ¥ÝÓ2ƒ z/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/armeabi-v7a/compile_commands.json  á¢ìßÓ2ƒ
 
~/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/armeabi-v7a/compile_commands.json.bin  Þÿ¥ÝÓ2 Š ~/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/armeabi-v7a/compile_commands.json.bin  á¢ìßÓ2 Š
 
/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/armeabi-v7a/metadata_generation_command.txt  Þÿ¥ÝÓ2 /home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/armeabi-v7a/metadata_generation_command.txt  á¢ìßÓ2
ñ ºó‡<C3B3>Ñ2{ ñ ºó‡<C3B3>Ñ2{
y y
w/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/armeabi-v7a/prefab_config.json  Þÿ¥ÝÓ2  ( ºó‡<C3B3>Ñ2€ w/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/armeabi-v7a/prefab_config.json  á¢ìßÓ2  ( ºó‡<C3B3>Ñ2€
~ ~
|/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/armeabi-v7a/symbol_folder_index.txt  Þÿ¥ÝÓ2  s ºó‡<C3B3>Ñ2b |/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/armeabi-v7a/symbol_folder_index.txt  á¢ìßÓ2  s ºó‡<C3B3>Ñ2b
` `
^/home/patrick/fvm/versions/3.29.0/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt  Þÿ¥ÝÓ2 ¤ ˆÈ¼<C388>Ñ2 ^/home/patrick/fvm/versions/3.29.0/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt  á¢ìßÓ2 ¤ ˆÈ¼<C388>Ñ2

View file

@ -2,27 +2,27 @@ C/C++ Structured Log}
{ {
y/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/x86/additional_project_files.txtC y/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/x86/additional_project_files.txtC
A A
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  ãÿ¥ÝÓ2  ø‡<C3B8>Ñ2z ?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  ú¢ìßÓ2  ø‡<C3B8>Ñ2z
x x
v/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/x86/android_gradle_build.json  äÿ¥ÝÓ2Ó Œø‡<C3B8>Ñ2 v/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/x86/android_gradle_build.json  ú¢ìßÓ2Ó Œø‡<C3B8>Ñ2
} }
{/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/x86/android_gradle_build_mini.json  äÿ¥ÝÓ2ì <20>ø‡<C3B8>Ñ2l {/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/x86/android_gradle_build_mini.json  ú¢ìßÓ2ì <20>ø‡<C3B8>Ñ2l
j j
h/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/x86/build.ninja  äÿ¥ÝÓ2Áº æ÷‡<C3B7>Ñ2p h/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/x86/build.ninja  ú¢ìßÓ2Áº æ÷‡<C3B7>Ñ2p
n n
l/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/x86/build.ninja.txt  äÿ¥ÝÓ2u l/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/x86/build.ninja.txt  ú¢ìßÓ2u
s s
q/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/x86/build_file_index.txt  äÿ¥ÝÓ2 ^ Žø‡<C3B8>Ñ2v q/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/x86/build_file_index.txt  û¢ìßÓ2 ^ Žø‡<C3B8>Ñ2v
t t
r/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/x86/compile_commands.json  äÿ¥ÝÓ2z r/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/x86/compile_commands.json  û¢ìßÓ2z
x x
v/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/x86/compile_commands.json.bin  äÿ¥ÝÓ2 v/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/x86/compile_commands.json.bin  û¢ìßÓ2
~ ~
|/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/x86/metadata_generation_command.txt  äÿ¥ÝÓ2 |/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/x86/metadata_generation_command.txt  û¢ìßÓ2
É Žø‡<C3B8>Ñ2s É Žø‡<C3B8>Ñ2s
q q
o/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/x86/prefab_config.json  äÿ¥ÝÓ2  ( Žø‡<C3B8>Ñ2x o/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/x86/prefab_config.json  û¢ìßÓ2  ( Žø‡<C3B8>Ñ2x
v v
t/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/x86/symbol_folder_index.txt  äÿ¥ÝÓ2  k Žø‡<C3B8>Ñ2b t/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/x86/symbol_folder_index.txt  û¢ìßÓ2  k Žø‡<C3B8>Ñ2b
` `
^/home/patrick/fvm/versions/3.29.0/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt  äÿ¥ÝÓ2 ¤ ˆÈ¼<C388>Ñ2 ^/home/patrick/fvm/versions/3.29.0/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt  û¢ìßÓ2 ¤ ˆÈ¼<C388>Ñ2

View file

@ -2,27 +2,27 @@ C/C++ Structured Log
~ ~
|/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/x86_64/additional_project_files.txtC |/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/x86_64/additional_project_files.txtC
A A
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  éÿ¥ÝÓ2  ¡ý‡<C3BD>Ñ2} ?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  ¯£ìßÓ2  ¡ý‡<C3BD>Ñ2}
{ {
y/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/x86_64/android_gradle_build.json  éÿ¥ÝÓ2Ù ¡ý‡<C3BD>Ñ2ƒ y/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/x86_64/android_gradle_build.json  ¯£ìßÓ2Ù ¡ý‡<C3BD>Ñ2ƒ
 
~/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/x86_64/android_gradle_build_mini.json  éÿ¥ÝÓ2ò ¢ý‡<C3BD>Ñ2o ~/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/x86_64/android_gradle_build_mini.json  ¯£ìßÓ2ò ¢ý‡<C3BD>Ñ2o
m m
k/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/x86_64/build.ninja  éÿ¥ÝÓ2к ý‡<C3BD>Ñ2s k/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/x86_64/build.ninja  ¯£ìßÓ2к ý‡<C3BD>Ñ2s
q q
o/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/x86_64/build.ninja.txt  éÿ¥ÝÓ2x o/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/x86_64/build.ninja.txt  ¯£ìßÓ2x
v v
t/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/x86_64/build_file_index.txt  éÿ¥ÝÓ2 ^ ¢ý‡<C3BD>Ñ2y t/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/x86_64/build_file_index.txt  ¯£ìßÓ2 ^ ¢ý‡<C3BD>Ñ2y
w w
u/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/x86_64/compile_commands.json  éÿ¥ÝÓ2} u/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/x86_64/compile_commands.json  ¯£ìßÓ2}
{ {
y/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/x86_64/compile_commands.json.bin  éÿ¥ÝÓ2 y/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/x86_64/compile_commands.json.bin  ¯£ìßÓ2
<EFBFBD> <EFBFBD>
/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/x86_64/metadata_generation_command.txt  éÿ¥ÝÓ2 /home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/x86_64/metadata_generation_command.txt  ¯£ìßÓ2
Ø ¢ý‡<C3BD>Ñ2v Ø ¢ý‡<C3BD>Ñ2v
t t
r/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/x86_64/prefab_config.json  éÿ¥ÝÓ2  ( ¢ý‡<C3BD>Ñ2{ r/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/x86_64/prefab_config.json  ¯£ìßÓ2  ( ¢ý‡<C3BD>Ñ2{
y y
w/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/x86_64/symbol_folder_index.txt  éÿ¥ÝÓ2  n ¢ý‡<C3BD>Ñ2b w/home/patrick/Documents/WebApps/pharmacy_mobile/android/app/.cxx/RelWithDebInfo/14495r4k/x86_64/symbol_folder_index.txt  ¯£ìßÓ2  n ¢ý‡<C3BD>Ñ2b
` `
^/home/patrick/fvm/versions/3.29.0/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt  éÿ¥ÝÓ2 ¤ ˆÈ¼<C388>Ñ2 ^/home/patrick/fvm/versions/3.29.0/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt  ¯£ìßÓ2 ¤ ˆÈ¼<C388>Ñ2

View file

@ -1,9 +1,9 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"> <manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application <application
android:label="OFA Mobile" android:label="pharmacy_mobile"
android:name="${applicationName}" android:name="${applicationName}"
android:enableOnBackInvokedCallback="true"
android:icon="@mipmap/launcher_icon"> android:icon="@mipmap/launcher_icon">
<activity <activity
android:name=".MainActivity" android:name=".MainActivity"
android:exported="true" android:exported="true"
@ -45,5 +45,5 @@
</queries> </queries>
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.INTERNET"/>
<!-- <uses-permission android:name="android.permission.CAMERA" /> --> <uses-permission android:name="android.permission.CAMERA" />
</manifest> </manifest>

View file

@ -3,6 +3,10 @@
the Flutter tool needs it to communicate with the running application the Flutter tool needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc. to allow setting breakpoints, to provide hot reload, etc.
--> -->
<application
android:enableOnBackInvokedCallback="true">
</application>
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.CAMERA" />
</manifest> </manifest>

View file

@ -1,3 +1,4 @@
org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError
android.useAndroidX=true android.useAndroidX=true
android.enableJetifier=true android.enableJetifier=true

View file

@ -0,0 +1,19 @@
import 'package:flutter/material.dart';
import 'package:simple_barcode_scanner/simple_barcode_scanner.dart';
Future<String> barcodeScan(BuildContext context) async {
String? barcode = await SimpleBarcodeScanner.scanBarcode(
context,
// barcodeAppBar: const BarcodeAppBar(
// // appBarTitle: 'Test',
// // centerTitle: false,
// // enableBackButton: false,
// // backButtonIcon: Icon(Icons.arrow_back_ios),
// ),
// isShowFlashIcon: true,
delayMillis: 2000,
scanType: ScanType.barcode,
cameraFace: CameraFace.back,
);
return barcode != '-1' ? barcode ?? '' : '';
}

View file

@ -1,11 +1,9 @@
import 'dart:developer';
import 'dart:io';
import 'dart:typed_data';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:gap/gap.dart'; import 'package:gap/gap.dart';
import 'package:image_picker/image_picker.dart'; import 'package:image_picker/image_picker.dart';
import 'package:internet_connection_checker/internet_connection_checker.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/security/encryption.dart';
import 'package:pharmacy_mobile/tables/ref_categories.dart'; import 'package:pharmacy_mobile/tables/ref_categories.dart';
import 'package:pharmacy_mobile/tables/ref_generic_names.dart'; import 'package:pharmacy_mobile/tables/ref_generic_names.dart';
@ -44,7 +42,6 @@ class _AddMedicinePageState extends State<AddMedicinePage> {
final _storage = Storage(); final _storage = Storage();
final _nameController = TextEditingController(); final _nameController = TextEditingController();
final _barcodeController = TextEditingController(); final _barcodeController = TextEditingController();
final FocusNode _focusNode = FocusNode();
bool _isLoading = false; bool _isLoading = false;
late List _genericNameList = []; late List _genericNameList = [];
@ -58,21 +55,21 @@ class _AddMedicinePageState extends State<AddMedicinePage> {
late bool imageUploaded = false; late bool imageUploaded = false;
late String imageUrl = ''; late String imageUrl = '';
void _checkResult(List list, String name) { // void _checkResult(List list, String name) {
if (list.isEmpty) { // if (list.isEmpty) {
if (mounted) { // if (mounted) {
showNotification(context, 'Error: No $name Found', false); // showNotification(context, 'Error: No $name Found', false);
WidgetsBinding.instance.addPostFrameCallback((_) { // WidgetsBinding.instance.addPostFrameCallback((_) {
if (mounted) { // if (mounted) {
context.push('/main'); // context.push('/main');
} // }
}); // });
} // }
} else { // } else {
setState(() => {}); // setState(() => {});
} // }
} // }
// Future<Uint8List> compressFile(XFile file) async { // Future<Uint8List> compressFile(XFile file) async {
// var result = await FlutterImageCompress.compressWithFile( // var result = await FlutterImageCompress.compressWithFile(
@ -85,28 +82,32 @@ class _AddMedicinePageState extends State<AddMedicinePage> {
// return result; // return result;
// } // }
void _getGenerics() async { Future<void> _getGenerics() async {
_genericNameList = await _refGenericNames.getList(); _genericNameList = await _refGenericNames.getList();
_checkResult(_genericNameList, 'Generics'); setState(() {
checkResult(context, _genericNameList, 'Generics');
});
} }
void _getTypes() async { Future<void> _getTypes() async {
_typeList = await _refTypes.getList(); _typeList = await _refTypes.getList();
_checkResult(_typeList, 'Types'); setState(() {
checkResult(context, _typeList, 'Types');
});
} }
void _getManufactorer() async { Future<void> _getManufactorer() async {
_manufactorerList = await _refManufactorer.getList(); _manufactorerList = await _refManufactorer.getList();
_checkResult(_manufactorerList, 'Manufactorer'); setState(() {
checkResult(context, _manufactorerList, 'Manufactorer');
});
} }
void autoRun() async { void autoRun() async {
if (await InternetConnectionChecker.instance.hasConnection) { if (await InternetConnectionChecker.instance.hasConnection) {
_getGenerics(); await _getGenerics();
_getTypes(); await _getTypes();
_getManufactorer(); await _getManufactorer();
setState(() {});
// final sample = await _refMedicines.getList2(); // final sample = await _refMedicines.getList2();
} else { } else {
@ -139,20 +140,20 @@ class _AddMedicinePageState extends State<AddMedicinePage> {
} }
Future<void> _scanBarcode() async { Future<void> _scanBarcode() async {
String? barcode = await SimpleBarcodeScanner.scanBarcode( // String? barcode = await SimpleBarcodeScanner.scanBarcode(
context, // context,
// barcodeAppBar: const BarcodeAppBar( // // barcodeAppBar: const BarcodeAppBar(
// // appBarTitle: 'Test', // // // appBarTitle: 'Test',
// // centerTitle: false, // // // centerTitle: false,
// // enableBackButton: false, // // // enableBackButton: false,
// // backButtonIcon: Icon(Icons.arrow_back_ios), // // // backButtonIcon: Icon(Icons.arrow_back_ios),
// ), // // ),
// isShowFlashIcon: true, // // isShowFlashIcon: true,
delayMillis: 2000, // delayMillis: 2000,
scanType: ScanType.barcode, // scanType: ScanType.barcode,
cameraFace: CameraFace.back, // cameraFace: CameraFace.back,
); // );
_barcodeController.text = barcode != '-1' ? barcode ?? '' : ''; _barcodeController.text = await barcodeScan(context);
} }
void _saveMedicine() async { void _saveMedicine() async {
@ -214,7 +215,6 @@ class _AddMedicinePageState extends State<AddMedicinePage> {
@override @override
void dispose() { void dispose() {
_nameController.dispose(); _nameController.dispose();
_focusNode.dispose();
_barcodeController.dispose(); _barcodeController.dispose();
_genericNameList = []; _genericNameList = [];

View file

@ -1,17 +1,25 @@
import 'dart:developer'; import 'dart:developer';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:gap/gap.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/ref_medicines.dart';
import 'package:pharmacy_mobile/tables/stocks.dart'; import 'package:pharmacy_mobile/tables/stocks.dart';
import 'package:pharmacy_mobile/widgets/button_widget.dart'; import 'package:pharmacy_mobile/widgets/button_widget.dart';
import 'package:pharmacy_mobile/widgets/datepicker_widget.dart'; import 'package:pharmacy_mobile/widgets/datepicker_widget.dart';
import 'package:pharmacy_mobile/widgets/dropdown_widget.dart'; import 'package:pharmacy_mobile/widgets/dropdown_widget.dart';
import 'package:pharmacy_mobile/widgets/dropdown_wrappermulti_widget.dart';
import 'package:pharmacy_mobile/widgets/form_border_widget2.dart'; import 'package:pharmacy_mobile/widgets/form_border_widget2.dart';
import 'package:pharmacy_mobile/widgets/input_widget.dart'; import 'package:pharmacy_mobile/widgets/input_widget.dart';
import 'package:pharmacy_mobile/widgets/page_background_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/text_widget.dart';
import 'package:pharmacy_mobile/widgets/title_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'; import 'package:simple_barcode_scanner/simple_barcode_scanner.dart';
class AddStockPage extends StatefulWidget { class AddStockPage extends StatefulWidget {
@ -23,10 +31,10 @@ class AddStockPage extends StatefulWidget {
class _AddStockPageState extends State<AddStockPage> with WidgetsBindingObserver { class _AddStockPageState extends State<AddStockPage> with WidgetsBindingObserver {
final _formKey = GlobalKey<FormState>(); final _formKey = GlobalKey<FormState>();
final FocusNode _focusNode = FocusNode();
final _refMedicines = RefMedicines(); final _refMedicines = RefMedicines();
final _quantityController = TextEditingController(); final _quantityController = TextEditingController();
final _dateController = TextEditingController(); final _dateController = TextEditingController();
final _medicineController = TextEditingController();
final _stocks = Stocks(); final _stocks = Stocks();
final bool _isLoading = false; final bool _isLoading = false;
@ -36,10 +44,42 @@ class _AddStockPageState extends State<AddStockPage> with WidgetsBindingObserver
late DateTime selectedDate = DateTime.now(); late DateTime selectedDate = DateTime.now();
late String barcode = ''; late String barcode = '';
void autoRun() async { // void autoRun() async {
_medicineList = await _refMedicines.getList(); // _medicineList = await _refMedicines.getList();
// }
void _getMedicines() async {
_medicineList = await _refMedicines.getList2();
setState(() {
checkResult(context, _medicineList, 'Medicines');
});
} }
void autoRun() async {
if (await InternetConnectionChecker.instance.hasConnection) {
_getMedicines();
} else {
if (mounted) {
showNotification(context, 'Error: No Internet Connection', false);
WidgetsBinding.instance.addPostFrameCallback((_) {
context.push('/main');
});
}
}
}
// Future<bool> _getMedicines() async {
// late bool? result;
// _medicineList = await _refMedicines.getList();
// if (mounted) {
// result = await checkResult(context, _medicineList, 'Medicines');
// log(result.toString());
// }
// return result ?? false;
// }
void _updateMedicine(dynamic medicine) { void _updateMedicine(dynamic medicine) {
_selectedMedicine = medicine; _selectedMedicine = medicine;
} }
@ -52,15 +92,24 @@ class _AddStockPageState extends State<AddStockPage> with WidgetsBindingObserver
await _stocks.postStock(stockNameUUID, stockExpiration, stockQuantity); await _stocks.postStock(stockNameUUID, stockExpiration, stockQuantity);
} }
Future<void> _scanBarcode() async {
_selectedMedicine = await barcodeScan(context);
}
Future<String> _getMedicineUsingBarcode(String name) async {
final encryptedBarcode = await _refMedicines.getBarcode(name);
final barcode = decrypt(encryptedBarcode);
return barcode;
}
@override @override
void initState() { void initState() {
autoRun(); _getMedicines();
super.initState(); super.initState();
} }
@override @override
void dispose() { void dispose() {
_focusNode.dispose();
_medicineList = []; _medicineList = [];
_selectedMedicine = ''; _selectedMedicine = '';
_quantityController.dispose(); _quantityController.dispose();
@ -89,13 +138,52 @@ class _AddStockPageState extends State<AddStockPage> with WidgetsBindingObserver
child: Form( child: Form(
key: _formKey, key: _formKey,
child: Center( child: Center(
child: Column( child: DropdownWrapperMultiWidget(
list: _medicineList,
text: 'Data',
children: [ children: [
DropDownWidget( DropDownWidget(
label: 'Medicine Name', label: 'Medicine Name',
list: _medicineList, list: _medicineList,
listTitle: 'medicine_name', listTitle: 'medicine_name',
onChanged: _updateMedicine), onChanged: _updateMedicine),
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
GestureDetector(
onTap: _scanBarcode,
child: Container(
padding: const EdgeInsets.only(top: 8),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(20),
// color: const Color.fromARGB(0, 36, 18, 58),
// boxShadow: [
// BoxShadow(
// color: Colors.black26,
// blurRadius: 5.0,
// offset: Offset(0, 2),
// ),
// ],
),
child: Row(
children: [
Icon(
Icons.qr_code_scanner,
color: Colors.white,
size: 22,
),
const Gap(8),
TextWidget(
text: 'Scan Barcode',
size: 14,
color: Colors.white,
),
],
),
),
),
],
),
const Gap(16), const Gap(16),
InputWidget(label: 'Quantity', controller: _quantityController), InputWidget(label: 'Quantity', controller: _quantityController),
const Gap(16), const Gap(16),
@ -107,28 +195,6 @@ class _AddStockPageState extends State<AddStockPage> with WidgetsBindingObserver
const Gap(32), const Gap(32),
ButtonWidget(text: 'Add Stock', onPressed: _saveStock), ButtonWidget(text: 'Add Stock', onPressed: _saveStock),
const Gap(16), const Gap(16),
ButtonWidget(
text: 'Barcode',
onPressed: () async {
String? bc = await SimpleBarcodeScanner.scanBarcode(
context,
// barcodeAppBar: const BarcodeAppBar(
// // appBarTitle: 'Test',
// // centerTitle: false,
// // enableBackButton: false,
// // backButtonIcon: Icon(Icons.arrow_back_ios),
// ),
// isShowFlashIcon: true,
delayMillis: 2000,
scanType: ScanType.barcode,
cameraFace: CameraFace.back,
);
setState(() {
barcode = bc as String;
});
},
),
const Gap(16),
TextWidget( TextWidget(
text: barcode, text: barcode,
size: 14, size: 14,

View file

@ -0,0 +1,17 @@
import 'package:lazyxchacha/keypair.dart' as kp;
class KeyPairSingleton {
static final KeyPairSingleton _instance = KeyPairSingleton._internal();
late kp.KeyPair _keyPair;
factory KeyPairSingleton() {
return _instance;
}
KeyPairSingleton._internal() {
// Initialize the KeyPair instance here
_keyPair = kp.KeyPair();
}
kp.KeyPair get keyPair => _keyPair;
}

View file

@ -29,6 +29,11 @@ class RefMedicines {
return data.first['ref_medicines_uuid']; return data.first['ref_medicines_uuid'];
} }
Future<String> getBarcode(String name) async {
final data = await _supabase.from('ref_medicines').select('barcode').eq('medicine_name', name);
return data.first['barcode'];
}
Future<void> postMedicine(String uuid, String name, String muuid, String guuid, String tuuid, String barcode) async { Future<void> postMedicine(String uuid, String name, String muuid, String guuid, String tuuid, String barcode) async {
final medicine = { final medicine = {
'ref_medicines_uuid': uuid, 'ref_medicines_uuid': uuid,

View file

@ -52,7 +52,7 @@ class DropDownWidget extends StatelessWidget {
textStyle: textStyle:
GoogleFonts.outfit(textStyle: const TextStyle(color: Color.fromRGBO(255, 255, 255, 1), fontSize: 16)), GoogleFonts.outfit(textStyle: const TextStyle(color: Color.fromRGBO(255, 255, 255, 1), fontSize: 16)),
menuStyle: MenuStyle( menuStyle: MenuStyle(
backgroundColor: WidgetStateProperty.all<Color>(const Color.fromRGBO(13, 21, 42, 0.663)), backgroundColor: WidgetStateProperty.all<Color>(const Color.fromRGBO(21, 13, 35, 0.902)),
padding: WidgetStateProperty.all(const EdgeInsets.symmetric(vertical: 16, horizontal: 8)), padding: WidgetStateProperty.all(const EdgeInsets.symmetric(vertical: 16, horizontal: 8)),
shape: WidgetStateProperty.all(RoundedRectangleBorder( shape: WidgetStateProperty.all(RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8), // Set the border radius for the dropdown menu borderRadius: BorderRadius.circular(8), // Set the border radius for the dropdown menu