case sensitive
This commit is contained in:
parent
80d7357ff9
commit
1619cb25dd
@ -2,27 +2,27 @@ C/C++ Structured Log
|
|||||||
…
|
…
|
||||||
‚/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/arm64-v8a/additional_project_files.txtC
|
‚/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/arm64-v8a/additional_project_files.txtC
|
||||||
A
|
A
|
||||||
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint ¥ü¿<EFBFBD>è2 £ŸÐõã2„
|
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint ÷<EFBFBD>“„ñ2 £ŸÐõã2„
|
||||||
<EFBFBD>
|
<EFBFBD>
|
||||||
/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/arm64-v8a/android_gradle_build.json ¥ü¿<EFBFBD>è2’ ¦ŸÐõã2Š
|
/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/arm64-v8a/android_gradle_build.json ÷<EFBFBD>“„ñ2’ ¦ŸÐõã2Š
|
||||||
‡
|
‡
|
||||||
„/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/arm64-v8a/android_gradle_build_mini.json ¥ü¿<EFBFBD>è2• ©ŸÐõã2u
|
„/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/arm64-v8a/android_gradle_build_mini.json ÷<EFBFBD>“„ñ2• ©ŸÐõã2u
|
||||||
s
|
s
|
||||||
q/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/arm64-v8a/build.ninja ¦ü¿<EFBFBD>è2²Í <20>ŸÐõã2y
|
q/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/arm64-v8a/build.ninja ÷<EFBFBD>“„ñ2²Í <20>ŸÐõã2y
|
||||||
w
|
w
|
||||||
u/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/arm64-v8a/build.ninja.txt ¦ü¿<EFBFBD>è2~
|
u/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/arm64-v8a/build.ninja.txt ÷<EFBFBD>“„ñ2~
|
||||||
|
|
|
|
||||||
z/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/arm64-v8a/build_file_index.txt ¦ü¿<EFBFBD>è2
_ ªŸÐõã2
|
z/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/arm64-v8a/build_file_index.txt ÷<EFBFBD>“„ñ2
_ ªŸÐõã2
|
||||||
}
|
}
|
||||||
{/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/arm64-v8a/compile_commands.json ¦ü¿<EFBFBD>è2„
|
{/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/arm64-v8a/compile_commands.json ÷<EFBFBD>“„ñ2„
|
||||||
<EFBFBD>
|
<EFBFBD>
|
||||||
/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/arm64-v8a/compile_commands.json.bin ¦ü¿<EFBFBD>è2 ‹
|
/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/arm64-v8a/compile_commands.json.bin ÷<EFBFBD>“„ñ2 ‹
|
||||||
ˆ
|
ˆ
|
||||||
…/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/arm64-v8a/metadata_generation_command.txt ¦ü¿<EFBFBD>è2
|
…/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/arm64-v8a/metadata_generation_command.txt ÷<EFBFBD>“„ñ2
|
||||||
š ªŸÐõã2|
|
š ªŸÐõã2|
|
||||||
z
|
z
|
||||||
x/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/arm64-v8a/prefab_config.json ¦ü¿<EFBFBD>è2
( ªŸÐõã2<C3A3>
|
x/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/arm64-v8a/prefab_config.json ÷<EFBFBD>“„ñ2
( ªŸÐõã2<C3A3>
|
||||||
|
|
||||||
}/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/arm64-v8a/symbol_folder_index.txt ¦ü¿<EFBFBD>è2
t ªŸÐõã2c
|
}/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/arm64-v8a/symbol_folder_index.txt ÷<EFBFBD>“„ñ2
t ªŸÐõã2c
|
||||||
a
|
a
|
||||||
_/Users/venbateam/Documents/flutter/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt ¦ü¿<EFBFBD>è2
¤ òÑÞ€á2
|
_/Users/venbateam/Documents/flutter/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt ÷<EFBFBD>“„ñ2
¤ òÑÞ€á2
|
||||||
@ -2,27 +2,27 @@ C/C++ Structured Log
|
|||||||
‡
|
‡
|
||||||
„/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/armeabi-v7a/additional_project_files.txtC
|
„/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/armeabi-v7a/additional_project_files.txtC
|
||||||
A
|
A
|
||||||
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint ½ü¿<EFBFBD>è2 ª¥Ðõã2‡
|
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint €‘“„ñ2 ª¥Ðõã2‡
|
||||||
„
|
„
|
||||||
<EFBFBD>/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/armeabi-v7a/android_gradle_build.json ½ü¿<EFBFBD>è2– «¥Ðõã2Œ
|
<EFBFBD>/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/armeabi-v7a/android_gradle_build.json €‘“„ñ2– «¥Ðõã2Œ
|
||||||
‰
|
‰
|
||||||
†/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/armeabi-v7a/android_gradle_build_mini.json ½ü¿<EFBFBD>è2™ ¬¥Ðõã2w
|
†/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/armeabi-v7a/android_gradle_build_mini.json €‘“„ñ2™ ¬¥Ðõã2w
|
||||||
u
|
u
|
||||||
s/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/armeabi-v7a/build.ninja ½ü¿<EFBFBD>è2¾Í ¡¥Ðõã2{
|
s/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/armeabi-v7a/build.ninja €‘“„ñ2¾Í ¡¥Ðõã2{
|
||||||
y
|
y
|
||||||
w/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/armeabi-v7a/build.ninja.txt ½ü¿<EFBFBD>è2€
|
w/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/armeabi-v7a/build.ninja.txt €‘“„ñ2€
|
||||||
~
|
~
|
||||||
|/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/armeabi-v7a/build_file_index.txt ½ü¿<EFBFBD>è2
_ ¬¥Ðõã2<C3A3>
|
|/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/armeabi-v7a/build_file_index.txt €‘“„ñ2
_ ¬¥Ðõã2<C3A3>
|
||||||
|
|
||||||
}/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/armeabi-v7a/compile_commands.json ½ü¿<EFBFBD>è2‡
|
}/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/armeabi-v7a/compile_commands.json €‘“„ñ2‡
|
||||||
„
|
„
|
||||||
<EFBFBD>/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/armeabi-v7a/compile_commands.json.bin ½ü¿<EFBFBD>è2 <09>
|
<EFBFBD>/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/armeabi-v7a/compile_commands.json.bin €‘“„ñ2 <09>
|
||||||
Š
|
Š
|
||||||
‡/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/armeabi-v7a/metadata_generation_command.txt ½ü¿<EFBFBD>è2
|
‡/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/armeabi-v7a/metadata_generation_command.txt €‘“„ñ2
|
||||||
¤ ¬¥Ðõã2~
|
¤ ¬¥Ðõã2~
|
||||||
|
|
|
|
||||||
z/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/armeabi-v7a/prefab_config.json ½ü¿<EFBFBD>è2
( ¬¥Ðõã2„
|
z/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/armeabi-v7a/prefab_config.json €‘“„ñ2
( ¬¥Ðõã2„
|
||||||
<EFBFBD>
|
<EFBFBD>
|
||||||
/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/armeabi-v7a/symbol_folder_index.txt ½ü¿<EFBFBD>è2
v ¬¥Ðõã2c
|
/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/armeabi-v7a/symbol_folder_index.txt €‘“„ñ2
v ¬¥Ðõã2c
|
||||||
a
|
a
|
||||||
_/Users/venbateam/Documents/flutter/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt ½ü¿<EFBFBD>è2
¤ òÑÞ€á2
|
_/Users/venbateam/Documents/flutter/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt €‘“„ñ2
¤ òÑÞ€á2
|
||||||
@ -2,27 +2,27 @@ C/C++ Structured Log
|
|||||||
~
|
~
|
||||||
|/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86/additional_project_files.txtC
|
|/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86/additional_project_files.txtC
|
||||||
A
|
A
|
||||||
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint Äü¿<EFBFBD>è2 ϧÐõã2}
|
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint „‘“„ñ2 ϧÐõã2}
|
||||||
{
|
{
|
||||||
y/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86/android_gradle_build.json Äü¿<EFBFBD>è2† ϧÐõã2ƒ
|
y/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86/android_gradle_build.json „‘“„ñ2† ϧÐõã2ƒ
|
||||||
€
|
€
|
||||||
~/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86/android_gradle_build_mini.json Äü¿<EFBFBD>è2‰ ЧÐõã2o
|
~/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86/android_gradle_build_mini.json „‘“„ñ2‰ ЧÐõã2o
|
||||||
m
|
m
|
||||||
k/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86/build.ninja Äü¿<EFBFBD>è2ŽÍ ǧÐõã2s
|
k/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86/build.ninja „‘“„ñ2ŽÍ ǧÐõã2s
|
||||||
q
|
q
|
||||||
o/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86/build.ninja.txt Äü¿<EFBFBD>è2x
|
o/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86/build.ninja.txt „‘“„ñ2x
|
||||||
v
|
v
|
||||||
t/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86/build_file_index.txt Äü¿<EFBFBD>è2
_ ЧÐõã2y
|
t/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86/build_file_index.txt „‘“„ñ2
_ ЧÐõã2y
|
||||||
w
|
w
|
||||||
u/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86/compile_commands.json Äü¿<EFBFBD>è2}
|
u/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86/compile_commands.json „‘“„ñ2}
|
||||||
{
|
{
|
||||||
y/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86/compile_commands.json.bin Äü¿<EFBFBD>è2 „
|
y/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86/compile_commands.json.bin „‘“„ñ2 „
|
||||||
<EFBFBD>
|
<EFBFBD>
|
||||||
/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86/metadata_generation_command.txt Äü¿<EFBFBD>è2
|
/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86/metadata_generation_command.txt „‘“„ñ2
|
||||||
ü ЧÐõã2v
|
ü ЧÐõã2v
|
||||||
t
|
t
|
||||||
r/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86/prefab_config.json Äü¿<EFBFBD>è2
( ЧÐõã2{
|
r/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86/prefab_config.json „‘“„ñ2
( ЧÐõã2{
|
||||||
y
|
y
|
||||||
w/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86/symbol_folder_index.txt Äü¿<EFBFBD>è2
n ЧÐõã2c
|
w/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86/symbol_folder_index.txt „‘“„ñ2
n ЧÐõã2c
|
||||||
a
|
a
|
||||||
_/Users/venbateam/Documents/flutter/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt Äü¿<EFBFBD>è2
¤ òÑÞ€á2
|
_/Users/venbateam/Documents/flutter/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt „‘“„ñ2
¤ òÑÞ€á2
|
||||||
@ -2,27 +2,27 @@ C/C++ Structured Log
|
|||||||
<EFBFBD>
|
<EFBFBD>
|
||||||
/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86_64/additional_project_files.txtC
|
/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86_64/additional_project_files.txtC
|
||||||
A
|
A
|
||||||
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint Éü¿<EFBFBD>è2 Ò©Ðõã2€
|
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint ‹‘“„ñ2 Ò©Ðõã2€
|
||||||
~
|
~
|
||||||
|/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86_64/android_gradle_build.json Éü¿<EFBFBD>è2Œ Ò©Ðõã2‡
|
|/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86_64/android_gradle_build.json ‹‘“„ñ2Œ Ò©Ðõã2‡
|
||||||
„
|
„
|
||||||
<EFBFBD>/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86_64/android_gradle_build_mini.json Éü¿<EFBFBD>è2<18> Ó©Ðõã2r
|
<EFBFBD>/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86_64/android_gradle_build_mini.json ‹‘“„ñ2<18> Ó©Ðõã2r
|
||||||
p
|
p
|
||||||
n/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86_64/build.ninja Éü¿<EFBFBD>è2 Í Ë©Ðõã2v
|
n/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86_64/build.ninja ‹‘“„ñ2 Í Ë©Ðõã2v
|
||||||
t
|
t
|
||||||
r/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86_64/build.ninja.txt Éü¿<EFBFBD>è2{
|
r/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86_64/build.ninja.txt ‹‘“„ñ2{
|
||||||
y
|
y
|
||||||
w/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86_64/build_file_index.txt Éü¿<EFBFBD>è2
_ Ó©Ðõã2|
|
w/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86_64/build_file_index.txt ‹‘“„ñ2
_ Ó©Ðõã2|
|
||||||
z
|
z
|
||||||
x/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86_64/compile_commands.json Éü¿<EFBFBD>è2€
|
x/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86_64/compile_commands.json ‹‘“„ñ2€
|
||||||
~
|
~
|
||||||
|/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86_64/compile_commands.json.bin Éü¿<EFBFBD>è2 ˆ
|
|/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86_64/compile_commands.json.bin ‹‘“„ñ2 ˆ
|
||||||
…
|
…
|
||||||
‚/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86_64/metadata_generation_command.txt Éü¿<EFBFBD>è2
|
‚/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86_64/metadata_generation_command.txt ‹‘“„ñ2
|
||||||
‹ Ó©Ðõã2y
|
‹ Ó©Ðõã2y
|
||||||
w
|
w
|
||||||
u/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86_64/prefab_config.json Éü¿<EFBFBD>è2
( Ó©Ðõã2~
|
u/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86_64/prefab_config.json ‹‘“„ñ2
( Ó©Ðõã2~
|
||||||
|
|
|
|
||||||
z/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86_64/symbol_folder_index.txt Éü¿<EFBFBD>è2
q Ó©Ðõã2c
|
z/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86_64/symbol_folder_index.txt ‹‘“„ñ2
q Ó©Ðõã2c
|
||||||
a
|
a
|
||||||
_/Users/venbateam/Documents/flutter/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt Éü¿<EFBFBD>è2
¤ òÑÞ€á2
|
_/Users/venbateam/Documents/flutter/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt ‹‘“„ñ2
¤ òÑÞ€á2
|
||||||
@ -20,12 +20,12 @@ if (project.hasProperty('google-services.json')) {
|
|||||||
|
|
||||||
def flutterVersionCode = localProperties.getProperty("flutter.versionCode")
|
def flutterVersionCode = localProperties.getProperty("flutter.versionCode")
|
||||||
if (flutterVersionCode == null) {
|
if (flutterVersionCode == null) {
|
||||||
flutterVersionCode = "56"
|
flutterVersionCode = "59"
|
||||||
}
|
}
|
||||||
|
|
||||||
def flutterVersionName = localProperties.getProperty("flutter.versionName")
|
def flutterVersionName = localProperties.getProperty("flutter.versionName")
|
||||||
if (flutterVersionName == null) {
|
if (flutterVersionName == null) {
|
||||||
flutterVersionName = "1.0.55"
|
flutterVersionName = "1.0.58"
|
||||||
}
|
}
|
||||||
|
|
||||||
def keystorePropertiesFile = rootProject.file("key.properties")
|
def keystorePropertiesFile = rootProject.file("key.properties")
|
||||||
|
|||||||
@ -14,6 +14,16 @@ allprojects {
|
|||||||
google()
|
google()
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
}
|
}
|
||||||
|
subprojects {
|
||||||
|
configurations.all {
|
||||||
|
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
|
||||||
|
if (details.requested.group == 'org.bouncycastle' &&
|
||||||
|
details.requested.name == 'bcprov-jdk18on') {
|
||||||
|
details.useVersion '1.77'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rootProject.buildDir = "../build"
|
rootProject.buildDir = "../build"
|
||||||
|
|||||||
@ -1,8 +1,12 @@
|
|||||||
PODS:
|
PODS:
|
||||||
- app_links (0.0.2):
|
- app_links (0.0.2):
|
||||||
- Flutter
|
- Flutter
|
||||||
|
- app_settings (5.1.1):
|
||||||
|
- Flutter
|
||||||
- connectivity_plus (0.0.1):
|
- connectivity_plus (0.0.1):
|
||||||
- Flutter
|
- Flutter
|
||||||
|
- device_info_plus (0.0.1):
|
||||||
|
- Flutter
|
||||||
- Firebase/CoreOnly (11.10.0):
|
- Firebase/CoreOnly (11.10.0):
|
||||||
- FirebaseCore (~> 11.10.0)
|
- FirebaseCore (~> 11.10.0)
|
||||||
- Firebase/Messaging (11.10.0):
|
- Firebase/Messaging (11.10.0):
|
||||||
@ -99,7 +103,9 @@ PODS:
|
|||||||
|
|
||||||
DEPENDENCIES:
|
DEPENDENCIES:
|
||||||
- app_links (from `.symlinks/plugins/app_links/ios`)
|
- app_links (from `.symlinks/plugins/app_links/ios`)
|
||||||
|
- app_settings (from `.symlinks/plugins/app_settings/ios`)
|
||||||
- connectivity_plus (from `.symlinks/plugins/connectivity_plus/ios`)
|
- connectivity_plus (from `.symlinks/plugins/connectivity_plus/ios`)
|
||||||
|
- device_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
|
||||||
- firebase_core (from `.symlinks/plugins/firebase_core/ios`)
|
- firebase_core (from `.symlinks/plugins/firebase_core/ios`)
|
||||||
- firebase_messaging (from `.symlinks/plugins/firebase_messaging/ios`)
|
- firebase_messaging (from `.symlinks/plugins/firebase_messaging/ios`)
|
||||||
- Flutter (from `Flutter`)
|
- Flutter (from `Flutter`)
|
||||||
@ -130,8 +136,12 @@ SPEC REPOS:
|
|||||||
EXTERNAL SOURCES:
|
EXTERNAL SOURCES:
|
||||||
app_links:
|
app_links:
|
||||||
:path: ".symlinks/plugins/app_links/ios"
|
:path: ".symlinks/plugins/app_links/ios"
|
||||||
|
app_settings:
|
||||||
|
:path: ".symlinks/plugins/app_settings/ios"
|
||||||
connectivity_plus:
|
connectivity_plus:
|
||||||
:path: ".symlinks/plugins/connectivity_plus/ios"
|
:path: ".symlinks/plugins/connectivity_plus/ios"
|
||||||
|
device_info_plus:
|
||||||
|
:path: ".symlinks/plugins/device_info_plus/ios"
|
||||||
firebase_core:
|
firebase_core:
|
||||||
:path: ".symlinks/plugins/firebase_core/ios"
|
:path: ".symlinks/plugins/firebase_core/ios"
|
||||||
firebase_messaging:
|
firebase_messaging:
|
||||||
@ -163,7 +173,9 @@ EXTERNAL SOURCES:
|
|||||||
|
|
||||||
SPEC CHECKSUMS:
|
SPEC CHECKSUMS:
|
||||||
app_links: 76b66b60cc809390ca1ad69bfd66b998d2387ac7
|
app_links: 76b66b60cc809390ca1ad69bfd66b998d2387ac7
|
||||||
|
app_settings: 5127ae0678de1dcc19f2293271c51d37c89428b2
|
||||||
connectivity_plus: cb623214f4e1f6ef8fe7403d580fdad517d2f7dd
|
connectivity_plus: cb623214f4e1f6ef8fe7403d580fdad517d2f7dd
|
||||||
|
device_info_plus: 21fcca2080fbcd348be798aa36c3e5ed849eefbe
|
||||||
Firebase: 1fe1c0a7d9aaea32efe01fbea5f0ebd8d70e53a2
|
Firebase: 1fe1c0a7d9aaea32efe01fbea5f0ebd8d70e53a2
|
||||||
firebase_core: 2d4534e7b489907dcede540c835b48981d890943
|
firebase_core: 2d4534e7b489907dcede540c835b48981d890943
|
||||||
firebase_messaging: 75bc93a4df25faccad67f6662ae872ac9ae69b64
|
firebase_messaging: 75bc93a4df25faccad67f6662ae872ac9ae69b64
|
||||||
|
|||||||
@ -322,14 +322,10 @@
|
|||||||
inputFileListPaths = (
|
inputFileListPaths = (
|
||||||
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
|
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
|
||||||
);
|
);
|
||||||
inputPaths = (
|
|
||||||
);
|
|
||||||
name = "[CP] Embed Pods Frameworks";
|
name = "[CP] Embed Pods Frameworks";
|
||||||
outputFileListPaths = (
|
outputFileListPaths = (
|
||||||
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
|
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
|
||||||
);
|
);
|
||||||
outputPaths = (
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
shellPath = /bin/sh;
|
shellPath = /bin/sh;
|
||||||
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
|
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
|
||||||
@ -358,14 +354,10 @@
|
|||||||
inputFileListPaths = (
|
inputFileListPaths = (
|
||||||
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist",
|
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist",
|
||||||
);
|
);
|
||||||
inputPaths = (
|
|
||||||
);
|
|
||||||
name = "[CP] Copy Pods Resources";
|
name = "[CP] Copy Pods Resources";
|
||||||
outputFileListPaths = (
|
outputFileListPaths = (
|
||||||
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist",
|
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist",
|
||||||
);
|
);
|
||||||
outputPaths = (
|
|
||||||
);
|
|
||||||
runOnlyForDeploymentPostprocessing = 0;
|
runOnlyForDeploymentPostprocessing = 0;
|
||||||
shellPath = /bin/sh;
|
shellPath = /bin/sh;
|
||||||
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
|
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
|
||||||
@ -506,7 +498,7 @@
|
|||||||
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
CURRENT_PROJECT_VERSION = 5;
|
||||||
DEVELOPMENT_ASSET_PATHS = Runner/Assets.xcassets;
|
DEVELOPMENT_ASSET_PATHS = Runner/Assets.xcassets;
|
||||||
DEVELOPMENT_TEAM = 9N5SRFUGK2;
|
DEVELOPMENT_TEAM = 9N5SRFUGK2;
|
||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
@ -517,7 +509,7 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.0.3;
|
MARKETING_VERSION = 1.0.4;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = ae.gov.fcsc.frontend.ios;
|
PRODUCT_BUNDLE_IDENTIFIER = ae.gov.fcsc.frontend.ios;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
@ -705,7 +697,7 @@
|
|||||||
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
CURRENT_PROJECT_VERSION = 5;
|
||||||
DEVELOPMENT_ASSET_PATHS = Runner/Assets.xcassets;
|
DEVELOPMENT_ASSET_PATHS = Runner/Assets.xcassets;
|
||||||
DEVELOPMENT_TEAM = 9N5SRFUGK2;
|
DEVELOPMENT_TEAM = 9N5SRFUGK2;
|
||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
@ -716,7 +708,7 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.0.3;
|
MARKETING_VERSION = 1.0.4;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = ae.gov.fcsc.frontend.ios;
|
PRODUCT_BUNDLE_IDENTIFIER = ae.gov.fcsc.frontend.ios;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
@ -742,7 +734,7 @@
|
|||||||
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
|
||||||
CODE_SIGN_IDENTITY = "Apple Development";
|
CODE_SIGN_IDENTITY = "Apple Development";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
CURRENT_PROJECT_VERSION = 5;
|
||||||
DEVELOPMENT_ASSET_PATHS = Runner/Assets.xcassets;
|
DEVELOPMENT_ASSET_PATHS = Runner/Assets.xcassets;
|
||||||
DEVELOPMENT_TEAM = 9N5SRFUGK2;
|
DEVELOPMENT_TEAM = 9N5SRFUGK2;
|
||||||
ENABLE_BITCODE = NO;
|
ENABLE_BITCODE = NO;
|
||||||
@ -753,7 +745,7 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.0.3;
|
MARKETING_VERSION = 1.0.4;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = ae.gov.fcsc.frontend.ios;
|
PRODUCT_BUNDLE_IDENTIFIER = ae.gov.fcsc.frontend.ios;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||||
|
|||||||
@ -68,7 +68,7 @@
|
|||||||
<string>remote-notification</string>
|
<string>remote-notification</string>
|
||||||
</array>
|
</array>
|
||||||
<key>UILaunchStoryboardName</key>
|
<key>UILaunchStoryboardName</key>
|
||||||
<string>LaunchScreen.storyboard</string>
|
<string>LaunchScreen</string>
|
||||||
<key>UIMainStoryboardFile</key>
|
<key>UIMainStoryboardFile</key>
|
||||||
<string>Main</string>
|
<string>Main</string>
|
||||||
<key>UIStatusBarHidden</key>
|
<key>UIStatusBarHidden</key>
|
||||||
@ -79,10 +79,10 @@
|
|||||||
</array>
|
</array>
|
||||||
<key>UISupportedInterfaceOrientations~ipad</key>
|
<key>UISupportedInterfaceOrientations~ipad</key>
|
||||||
<array>
|
<array>
|
||||||
|
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||||
|
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||||
<string>UIInterfaceOrientationPortrait</string>
|
<string>UIInterfaceOrientationPortrait</string>
|
||||||
<string>UIInterfaceOrientationPortraitUpsideDown</string>
|
<string>UIInterfaceOrientationPortraitUpsideDown</string>
|
||||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
|
||||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
|
||||||
</array>
|
</array>
|
||||||
<key>UNUserNotificationCenterDelegate</key>
|
<key>UNUserNotificationCenterDelegate</key>
|
||||||
<string>YES</string>
|
<string>YES</string>
|
||||||
|
|||||||
72
lib/config/app_links_helper.dart
Normal file
72
lib/config/app_links_helper.dart
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
import 'dart:io';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
|
import 'package:android_intent_plus/android_intent.dart';
|
||||||
|
import 'package:android_intent_plus/flag.dart';
|
||||||
|
import 'package:app_settings/app_settings.dart';
|
||||||
|
|
||||||
|
class AppLinksHelper {
|
||||||
|
static Future<void> checkAndShowDialogOnce(BuildContext context) async {
|
||||||
|
final prefs = await SharedPreferences.getInstance();
|
||||||
|
final shown = prefs.getBool('supported_links_enabled') ?? false;
|
||||||
|
|
||||||
|
if (!shown) {
|
||||||
|
_showAppLinkDialog(context);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void _showAppLinkDialog(BuildContext context) {
|
||||||
|
showDialog(
|
||||||
|
context: context,
|
||||||
|
builder: (_) => AlertDialog(
|
||||||
|
title: const Text('Enable App Links'),
|
||||||
|
content: Platform.isIOS
|
||||||
|
? const Text(
|
||||||
|
'To ensure links like www.fcsc.com open directly in this app:\n\n'
|
||||||
|
'1. Open iOS Settings.\n'
|
||||||
|
'2. Scroll down and tap on "Your App Name".\n'
|
||||||
|
'3. Make sure "Allow Universal Links" is enabled (if visible).\n\n'
|
||||||
|
'Note: Some iOS versions do not show this explicitly.',
|
||||||
|
)
|
||||||
|
: const Text(
|
||||||
|
'To enable links like www.fcsc.com to open in this app:\n\n'
|
||||||
|
'1. Tap "Open Settings".\n'
|
||||||
|
'2. Tap "Supported web addresses".\n'
|
||||||
|
'3. Make sure your domain is enabled.\n\n'
|
||||||
|
'This helps open links directly in the app.',
|
||||||
|
),
|
||||||
|
actions: [
|
||||||
|
TextButton(
|
||||||
|
onPressed: () => Navigator.of(context).pop(),
|
||||||
|
child: const Text('Later'),
|
||||||
|
),
|
||||||
|
TextButton(
|
||||||
|
onPressed: () async {
|
||||||
|
Navigator.of(context).pop();
|
||||||
|
|
||||||
|
if (Platform.isIOS) {
|
||||||
|
AppSettings.openAppSettings();
|
||||||
|
} else {
|
||||||
|
_openAppLinkSettingsAndroid();
|
||||||
|
}
|
||||||
|
|
||||||
|
final prefs = await SharedPreferences.getInstance();
|
||||||
|
await prefs.setBool('supported_links_enabled', true);
|
||||||
|
},
|
||||||
|
child: const Text('Open Settings'),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void _openAppLinkSettingsAndroid() {
|
||||||
|
const packageName = 'ae.gov.fcsc.frontend'; // 🔁 Replace with your app's package
|
||||||
|
final intent = AndroidIntent(
|
||||||
|
action: 'android.settings.APP_OPEN_BY_DEFAULT_SETTINGS',
|
||||||
|
data: 'package:$packageName',
|
||||||
|
flags: <int>[Flag.FLAG_ACTIVITY_NEW_TASK],
|
||||||
|
);
|
||||||
|
intent.launch();
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -242,7 +242,7 @@ class _UaenumberWidgetState extends ConsumerState<uaenumberWidget> {
|
|||||||
color: Color(0xFFAA8E83),
|
color: Color(0xFFAA8E83),
|
||||||
fontFamily: context.translate('Roboto', 'NotoKufi'),
|
fontFamily: context.translate('Roboto', 'NotoKufi'),
|
||||||
fontSize: 14,
|
fontSize: 14,
|
||||||
height: 2.0,
|
// height: 1.8,
|
||||||
),
|
),
|
||||||
prefixIconConstraints: BoxConstraints(
|
prefixIconConstraints: BoxConstraints(
|
||||||
maxWidth: 42,
|
maxWidth: 42,
|
||||||
@ -272,7 +272,7 @@ class _UaenumberWidgetState extends ConsumerState<uaenumberWidget> {
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
: null,
|
: null,
|
||||||
contentPadding: EdgeInsets.symmetric(vertical: 9, horizontal: 18.0),
|
contentPadding: EdgeInsets.symmetric(vertical: 12, horizontal: 18.0),
|
||||||
border: InputBorder.none,
|
border: InputBorder.none,
|
||||||
// contentPadding:
|
// contentPadding:
|
||||||
// EdgeInsets.symmetric(vertical: 9, horizontal: 18.0),
|
// EdgeInsets.symmetric(vertical: 9, horizontal: 18.0),
|
||||||
|
|||||||
@ -235,10 +235,13 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
|
|||||||
|
|
||||||
final adminToken = adminAuth.token;
|
final adminToken = adminAuth.token;
|
||||||
print('adminTokenREgistration- ${adminToken}');
|
print('adminTokenREgistration- ${adminToken}');
|
||||||
|
var mailId = _emailController.text;
|
||||||
|
final email = mailId.toLowerCase();
|
||||||
|
print('LowerCase $email');
|
||||||
// Create user in PocketBase
|
// Create user in PocketBase
|
||||||
final response = await pb.collection('users').create(body: {
|
final response = await pb.collection('users').create(body: {
|
||||||
'uname': _usernameController.text,
|
'uname': _usernameController.text,
|
||||||
'email': _emailController.text,
|
'email': email,
|
||||||
'password': _passwordController.text,
|
'password': _passwordController.text,
|
||||||
'passwordConfirm': _passwordController.text,
|
'passwordConfirm': _passwordController.text,
|
||||||
'status': 'Pending',
|
'status': 'Pending',
|
||||||
|
|||||||
@ -2220,6 +2220,70 @@ class _ChartScreen1State extends ConsumerState<ChartScreen1> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<void> shareCurrentPage(BuildContext context, bool isSharing) async {
|
||||||
|
if (isSharing) return; // Prevent multiple taps
|
||||||
|
|
||||||
|
isSharing = true;
|
||||||
|
setState(() {
|
||||||
|
isLoading = true;
|
||||||
|
});
|
||||||
|
|
||||||
|
try {
|
||||||
|
final String currentRoute = GoRouterState.of(context).uri.toString();
|
||||||
|
final String baseAppLink = 'https://www.fcsc.com';
|
||||||
|
final String shareLink = '$baseAppLink$currentRoute';
|
||||||
|
final String shareText = 'Check this out!\n\n$shareLink';
|
||||||
|
print('Generated Share Link: $shareLink');
|
||||||
|
|
||||||
|
// Optional: Capture SVG to image
|
||||||
|
final String svgAssetPath = 'assets/backgrounds/share/fcsc.svg';
|
||||||
|
final screenshotController = ScreenshotController();
|
||||||
|
final svgWidget = SvgPicture.asset(
|
||||||
|
svgAssetPath,
|
||||||
|
width: 200,
|
||||||
|
height: 200,
|
||||||
|
);
|
||||||
|
|
||||||
|
final Uint8List? capturedImage =
|
||||||
|
await screenshotController.captureFromWidget(
|
||||||
|
Material(child: svgWidget),
|
||||||
|
);
|
||||||
|
|
||||||
|
if (capturedImage == null) {
|
||||||
|
print('SVG capture failed, proceeding without image.');
|
||||||
|
await Share.share(shareText, subject: 'App Link');
|
||||||
|
} else {
|
||||||
|
final directory = await getTemporaryDirectory();
|
||||||
|
final file = File('${directory.path}/share_image.png');
|
||||||
|
await file.writeAsBytes(capturedImage);
|
||||||
|
|
||||||
|
await Share.shareXFiles(
|
||||||
|
[XFile(file.path)],
|
||||||
|
text: shareText,
|
||||||
|
subject: 'Shared Content',
|
||||||
|
);
|
||||||
|
|
||||||
|
await file.delete();
|
||||||
|
}
|
||||||
|
setState(() {
|
||||||
|
isLoading = false;
|
||||||
|
});
|
||||||
|
} catch (e) {
|
||||||
|
setState(() {
|
||||||
|
isLoading = false;
|
||||||
|
});
|
||||||
|
print("Error sharing content: $e");
|
||||||
|
ScaffoldMessenger.of(context).showSnackBar(
|
||||||
|
SnackBar(content: Text('Error sharing: ${e.toString()}')),
|
||||||
|
);
|
||||||
|
} finally {
|
||||||
|
setState(() {
|
||||||
|
isLoading = false;
|
||||||
|
});
|
||||||
|
isSharing = false; // Reset flag
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// double calculateAspectRatio(int crossAxisCount, List<dynamic> cardData) {
|
// double calculateAspectRatio(int crossAxisCount, List<dynamic> cardData) {
|
||||||
// if (cardData.any((item) =>
|
// if (cardData.any((item) =>
|
||||||
// item['chart_type'] == 'total' || item['chart_type'] == 'average')) {
|
// item['chart_type'] == 'total' || item['chart_type'] == 'average')) {
|
||||||
@ -2890,56 +2954,7 @@ class _ChartScreen1State extends ConsumerState<ChartScreen1> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> shareCurrentPage(BuildContext context, bool isSharing) async {
|
|
||||||
if (isSharing) return; // Prevent multiple taps
|
|
||||||
|
|
||||||
isSharing = true;
|
|
||||||
try {
|
|
||||||
final String currentRoute = GoRouterState.of(context).uri.toString();
|
|
||||||
final String baseAppLink = 'https://www.fcsc.com';
|
|
||||||
final String shareLink = '$baseAppLink$currentRoute';
|
|
||||||
final String shareText = 'Check this out!\n\n$shareLink';
|
|
||||||
print('Generated Share Link: $shareLink');
|
|
||||||
|
|
||||||
// Optional: Capture SVG to image
|
|
||||||
final String svgAssetPath = 'assets/backgrounds/share/fcsc.svg';
|
|
||||||
final screenshotController = ScreenshotController();
|
|
||||||
final svgWidget = SvgPicture.asset(
|
|
||||||
svgAssetPath,
|
|
||||||
width: 200,
|
|
||||||
height: 200,
|
|
||||||
);
|
|
||||||
|
|
||||||
final Uint8List? capturedImage =
|
|
||||||
await screenshotController.captureFromWidget(
|
|
||||||
Material(child: svgWidget),
|
|
||||||
);
|
|
||||||
|
|
||||||
if (capturedImage == null) {
|
|
||||||
print('SVG capture failed, proceeding without image.');
|
|
||||||
await Share.share(shareText, subject: 'App Link');
|
|
||||||
} else {
|
|
||||||
final directory = await getTemporaryDirectory();
|
|
||||||
final file = File('${directory.path}/share_image.png');
|
|
||||||
await file.writeAsBytes(capturedImage);
|
|
||||||
|
|
||||||
await Share.shareXFiles(
|
|
||||||
[XFile(file.path)],
|
|
||||||
text: shareText,
|
|
||||||
subject: 'Shared Content',
|
|
||||||
);
|
|
||||||
|
|
||||||
await file.delete();
|
|
||||||
}
|
|
||||||
} catch (e) {
|
|
||||||
print("Error sharing content: $e");
|
|
||||||
ScaffoldMessenger.of(context).showSnackBar(
|
|
||||||
SnackBar(content: Text('Error sharing: ${e.toString()}')),
|
|
||||||
);
|
|
||||||
} finally {
|
|
||||||
isSharing = false; // Reset flag
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Function to convert hex color string to Color
|
// Function to convert hex color string to Color
|
||||||
Color _getColorFromHex(String hexColor) {
|
Color _getColorFromHex(String hexColor) {
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
import 'dart:math';
|
import 'dart:math';
|
||||||
|
import 'dart:math' as math;
|
||||||
|
|
||||||
import 'package:fl_chart/fl_chart.dart';
|
import 'package:fl_chart/fl_chart.dart';
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
@ -315,9 +316,9 @@ class ChartWidget extends StatelessWidget {
|
|||||||
// color: adjustColor(bodyColor, index), // Adjust alpha dynamically
|
// color: adjustColor(bodyColor, index), // Adjust alpha dynamically
|
||||||
color: uniqueColors[index % uniqueColors.length],
|
color: uniqueColors[index % uniqueColors.length],
|
||||||
// title: '${percentage.toStringAsFixed(1)}%',
|
// title: '${percentage.toStringAsFixed(1)}%',
|
||||||
title: percentage >= 0.1 ? '${percentage.toStringAsFixed(1)}%' : '',
|
// title: percentage >= 0.1 ? '${percentage.toStringAsFixed(1)}%' : '',
|
||||||
// title: percentage >= 0.1 ? '$displayTitle\n${percentage.toStringAsFixed(1)}%' : '',
|
title: percentage >= 0.1 ? '$displayTitle\n${percentage.toStringAsFixed(1)}%' : '',
|
||||||
radius: isTouched ? 70 : 50,
|
radius: isTouched ? 60 : 50,
|
||||||
|
|
||||||
// Increase size when touched
|
// Increase size when touched
|
||||||
titleStyle: TextStyle(
|
titleStyle: TextStyle(
|
||||||
@ -330,8 +331,8 @@ class ChartWidget extends StatelessWidget {
|
|||||||
color: Colors.black,
|
color: Colors.black,
|
||||||
// color: Colors.white,
|
// color: Colors.white,
|
||||||
),
|
),
|
||||||
titlePositionPercentageOffset: 1.4,
|
// titlePositionPercentageOffset: 1.4,
|
||||||
// titlePositionPercentageOffset: 1.7,
|
titlePositionPercentageOffset: 1.8,
|
||||||
);
|
);
|
||||||
}).toList();
|
}).toList();
|
||||||
}
|
}
|
||||||
@ -2948,7 +2949,395 @@ class ChartWidget extends StatelessWidget {
|
|||||||
_buildChartLegend(groupedCrops, parsedChartBarColors, uniqueColors,context),
|
_buildChartLegend(groupedCrops, parsedChartBarColors, uniqueColors,context),
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
// case 'd_chart_grouped_bar_horizantal':
|
case 'demo_line':
|
||||||
|
print('demo_line $groupByValues');
|
||||||
|
Map<String, Color> groupColorMap = {};
|
||||||
|
int colorIndex = 0;
|
||||||
|
|
||||||
|
var chartBarColors = chartData['chart_bar_color'] ?? {};
|
||||||
|
Map<String, String> barColorsMap = {};
|
||||||
|
chartBarColors.forEach((key, value) {
|
||||||
|
barColorsMap[key] = value.toString(); // Ensure values are strings
|
||||||
|
});
|
||||||
|
bool hasBarColors = barColorsMap.isNotEmpty;
|
||||||
|
|
||||||
|
var chartBarColorsRaw = chartData['chart_bar_color'] ?? {};
|
||||||
|
|
||||||
|
// Convert LinkedMap<dynamic, dynamic> to Map<String, String>
|
||||||
|
Map<String, String> chartBarColrs = Map<String, String>.from(
|
||||||
|
chartBarColorsRaw,
|
||||||
|
);
|
||||||
|
|
||||||
|
// Now map to Color
|
||||||
|
Map<String, Color> parsedChartBarColors = chartBarColrs.map((
|
||||||
|
key,
|
||||||
|
value,
|
||||||
|
) {
|
||||||
|
return MapEntry(key, _hexToColor(value));
|
||||||
|
});
|
||||||
|
|
||||||
|
print('parsedChartBarColors1 - $parsedChartBarColors');
|
||||||
|
|
||||||
|
for (String group in groupByValues) {
|
||||||
|
if (hasBarColors &&
|
||||||
|
chartData['dataset'] == 'population' &&
|
||||||
|
parsedChartBarColors.containsKey(group)) {
|
||||||
|
groupColorMap[group] = parsedChartBarColors[group]!;
|
||||||
|
} else {
|
||||||
|
groupColorMap[group] = uniqueColors[colorIndex % uniqueColors.length];
|
||||||
|
colorIndex++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
print('Group-Color Map: $groupColorMap');
|
||||||
|
|
||||||
|
// Extract all years from the chart data
|
||||||
|
List<int> years = (chartData['response'] as List<dynamic>)
|
||||||
|
.map<int>(
|
||||||
|
(entry) =>
|
||||||
|
int.tryParse(entry['ObsKey'][groupByKey] ?? '0') ?? 0,
|
||||||
|
).toList();
|
||||||
|
years.sort();
|
||||||
|
print(years);
|
||||||
|
print('years $years');
|
||||||
|
|
||||||
|
if (years.isEmpty) {
|
||||||
|
// Return an empty chart if no data
|
||||||
|
return LineChart(
|
||||||
|
LineChartData(
|
||||||
|
titlesData: FlTitlesData(show: false),
|
||||||
|
lineBarsData: [],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
print('LnTrnd1.2');
|
||||||
|
|
||||||
|
// Find the maximum year and calculate the range for the last 5 years
|
||||||
|
int maxYear = years.reduce((a, b) => a > b ? a : b);
|
||||||
|
int minYear = maxYear - 5;
|
||||||
|
|
||||||
|
// Filter chart data to only include entries within the last 5 years
|
||||||
|
List<dynamic> filteredData =
|
||||||
|
(chartData['response'] as List<dynamic>).where((entry) {
|
||||||
|
int year = int.tryParse(entry['ObsKey'][groupByKey] ?? '0') ?? 0;
|
||||||
|
return year >= minYear && year <= maxYear;
|
||||||
|
}).toList();
|
||||||
|
print('LnTrnd2 $filteredData');
|
||||||
|
|
||||||
|
final Map<String, List<Map<String, dynamic>>> groupedData = {};
|
||||||
|
|
||||||
|
// Step 1: Group data by PLANT_TYPE
|
||||||
|
for (var item in filteredData) {
|
||||||
|
final plantType = item['ObsKey'][groupByKey];
|
||||||
|
groupedData.putIfAbsent(plantType, () => []).add(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Step 2: Convert grouped data into List<LineChartBarData>
|
||||||
|
final List<LineChartBarData> lineBars = [];
|
||||||
|
final List<Color> colorPalette = [
|
||||||
|
Color(0xFF6097CD),
|
||||||
|
Color(0xFFD086A7),
|
||||||
|
Color(0xFF98BCE5),
|
||||||
|
Color(0xFFA7B5C5),
|
||||||
|
Color(0xFFBED3EC),
|
||||||
|
Color(0xFFD4E3F4),
|
||||||
|
];
|
||||||
|
|
||||||
|
|
||||||
|
String formatNumber(double value) {
|
||||||
|
if (value >= 1e12) {
|
||||||
|
return '${(value / 1e12).toStringAsFixed(2)}T';
|
||||||
|
} else if (value >= 1e9) {
|
||||||
|
return '${(value / 1e9).toStringAsFixed(2)}B';
|
||||||
|
} else if (value >= 1e6) {
|
||||||
|
return '${(value / 1e6).toStringAsFixed(2)}M';
|
||||||
|
} else if (value >= 1e3) {
|
||||||
|
return '${(value / 1e3).toStringAsFixed(2)}K';
|
||||||
|
} else {
|
||||||
|
return value.toStringAsFixed(2); // No decimals for small numbers
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
final getXValue = chartData['chart_type_json']['x'] ?? '';
|
||||||
|
groupedData.forEach((plantType, entries) {
|
||||||
|
final spots = entries.map((entry) {
|
||||||
|
final year = double.tryParse(entry['ObsKey'][getXValue].toString()) ?? 0;
|
||||||
|
final value = double.tryParse(entry['ObsValue']['Value'].toString()) ?? 0;
|
||||||
|
return FlSpot(year, value);
|
||||||
|
}).toList()
|
||||||
|
..sort((a, b) => a.x.compareTo(b.x)); // Sort by year
|
||||||
|
final baseColor = groupColorMap[plantType] ?? Colors.grey;
|
||||||
|
lineBars.add(
|
||||||
|
LineChartBarData(
|
||||||
|
spots: spots,
|
||||||
|
isCurved: true,
|
||||||
|
barWidth: 3,
|
||||||
|
// color: groupColorMap[plantType] ?? Colors.grey,
|
||||||
|
color: baseColor.withOpacity(0.9),
|
||||||
|
dotData: FlDotData(show: true),
|
||||||
|
belowBarData: BarAreaData(
|
||||||
|
show: true,
|
||||||
|
gradient: LinearGradient(
|
||||||
|
colors: [
|
||||||
|
// baseColor.withOpacity(0.2), // visible base color
|
||||||
|
// Colors.white, // fade to white
|
||||||
|
baseColor.withOpacity(0.4), // increase opacity
|
||||||
|
baseColor.withOpacity(0.0), // fade to transparent (not white)
|
||||||
|
],
|
||||||
|
stops: [
|
||||||
|
0.2, // shift teal color start downward (20% from the top)
|
||||||
|
1.0, // white at the bottom
|
||||||
|
],
|
||||||
|
begin: Alignment.topCenter,
|
||||||
|
end: Alignment.bottomCenter,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
showingIndicators: List.generate(spots.length, (index) => index),
|
||||||
|
|
||||||
|
),
|
||||||
|
);
|
||||||
|
colorIndex++;
|
||||||
|
});
|
||||||
|
|
||||||
|
return Scaffold(
|
||||||
|
backgroundColor: Colors.white,
|
||||||
|
body: Padding(
|
||||||
|
padding: const EdgeInsets.all(10),
|
||||||
|
child: LayoutBuilder(
|
||||||
|
builder: (context, constraints) {
|
||||||
|
final chartWidth = constraints.maxWidth;
|
||||||
|
final chartHeight = constraints.maxHeight;
|
||||||
|
final allSpots = lineBars.expand((line) => line.spots);
|
||||||
|
final minY = allSpots.map((e) => e.y).reduce((a, b) => a < b ? a : b);
|
||||||
|
final maxY = allSpots.map((e) => e.y).reduce((a, b) => a > b ? a : b);
|
||||||
|
|
||||||
|
|
||||||
|
final xValues = allSpots.map((e) => e.x).toList();
|
||||||
|
final minX = xValues.reduce((a, b) => a < b ? a : b).toInt();
|
||||||
|
final maxX = xValues.reduce((a, b) => a > b ? a : b).toInt();
|
||||||
|
|
||||||
|
final paddingFactor = 0.3; // 10% extra padding
|
||||||
|
|
||||||
|
final chartMinY = minY - (maxY - minY) * paddingFactor;
|
||||||
|
final chartMaxY = maxY + (maxY - minY) * paddingFactor;
|
||||||
|
|
||||||
|
|
||||||
|
return Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.center, // ensures center alignment
|
||||||
|
children: [
|
||||||
|
Padding(
|
||||||
|
padding: const EdgeInsets.only(top: 0),
|
||||||
|
child: Text(
|
||||||
|
chartData['chart_heading'] ?? 'Production Quantity by Crop Type (Metric Tonne)',
|
||||||
|
style: TextStyle(
|
||||||
|
fontFamily: context.translate('Roboto', 'NotoKufi'),
|
||||||
|
fontSize: 14,
|
||||||
|
fontWeight: FontWeight.w400,
|
||||||
|
),
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
// SizedBox(height: 6),
|
||||||
|
Expanded(
|
||||||
|
child: Stack(
|
||||||
|
children: [
|
||||||
|
LineChart(
|
||||||
|
LineChartData(
|
||||||
|
minY: chartMinY,
|
||||||
|
maxY: chartMaxY,
|
||||||
|
lineBarsData: lineBars,
|
||||||
|
clipData: FlClipData.all(), // make sure this doesn't clip the left side
|
||||||
|
|
||||||
|
// Add space for tooltip/dot
|
||||||
|
// extraLeftTitlesReservedWidth: 24,
|
||||||
|
titlesData: FlTitlesData(
|
||||||
|
bottomTitles: AxisTitles(
|
||||||
|
sideTitles: SideTitles(
|
||||||
|
showTitles: true,
|
||||||
|
getTitlesWidget: (value, meta) {
|
||||||
|
const style = TextStyle(
|
||||||
|
color: Colors.black,
|
||||||
|
fontSize: 10,
|
||||||
|
);
|
||||||
|
|
||||||
|
// Show only for full years
|
||||||
|
if (value.toInt() >= 2013 && value.toInt() <= 2022) {
|
||||||
|
return Column(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
|
// Top tick mark (simulated using a container)
|
||||||
|
Container(
|
||||||
|
width: 1,
|
||||||
|
height: 8,
|
||||||
|
color: Colors.black,
|
||||||
|
margin: EdgeInsets.only(bottom: 2),
|
||||||
|
),
|
||||||
|
Text(value.toInt().toString(), style: style),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return const SizedBox.shrink();
|
||||||
|
},
|
||||||
|
reservedSize: 30,
|
||||||
|
interval: 1,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
leftTitles: AxisTitles(
|
||||||
|
sideTitles: SideTitles(
|
||||||
|
showTitles: false,
|
||||||
|
// interval: 5,
|
||||||
|
reservedSize: 90,
|
||||||
|
getTitlesWidget: (value, _) =>
|
||||||
|
Text('${value.toInt()}', style: TextStyle(fontSize: 12)),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
topTitles: AxisTitles(sideTitles: SideTitles(showTitles: false)),
|
||||||
|
rightTitles: AxisTitles(sideTitles: SideTitles(showTitles: false)),
|
||||||
|
),
|
||||||
|
borderData: FlBorderData(
|
||||||
|
show: true,
|
||||||
|
border: const Border(
|
||||||
|
left: BorderSide.none,
|
||||||
|
bottom: BorderSide(color: Colors.black),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
gridData: FlGridData(show: false),
|
||||||
|
lineTouchData: LineTouchData(
|
||||||
|
enabled: true,
|
||||||
|
touchTooltipData: LineTouchTooltipData(
|
||||||
|
// tooltipBgColor: Colors.black.withOpacity(0.7),
|
||||||
|
fitInsideHorizontally: true,
|
||||||
|
fitInsideVertically: true,
|
||||||
|
getTooltipItems: (spots) {
|
||||||
|
return spots.map((spot) {
|
||||||
|
final x = spot.x.toInt();
|
||||||
|
// if (x == minX || x == maxX) return null;
|
||||||
|
return LineTooltipItem(
|
||||||
|
formatNumber(spot.y),
|
||||||
|
const TextStyle(color: Colors.white),
|
||||||
|
);
|
||||||
|
}).toList();
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
// ...lineBars.map((barData) {
|
||||||
|
// final List<FlSpot> spots = barData.spots;
|
||||||
|
// if (spots.isEmpty) return const SizedBox.shrink();
|
||||||
|
//
|
||||||
|
// final firstSpot = spots.first;
|
||||||
|
// final lastSpot = spots.last;
|
||||||
|
//
|
||||||
|
// return Stack(
|
||||||
|
// children: [
|
||||||
|
// // First Y value label
|
||||||
|
// Positioned(
|
||||||
|
// left: 10,
|
||||||
|
// top: (1 - (firstSpot.y - chartMinY) / (chartMaxY - chartMinY)) * chartHeight - 60,
|
||||||
|
// bottom: 0,
|
||||||
|
//
|
||||||
|
// // top: ((1 - (firstSpot.y - minY) / (m axY - minY)) * chartHeight)
|
||||||
|
// // .clamp(0.0, chartHeight - 20),
|
||||||
|
// child: Text(
|
||||||
|
// formatNumber(firstSpot.y),
|
||||||
|
// style: TextStyle(
|
||||||
|
// fontSize: 12,
|
||||||
|
// fontWeight: FontWeight.bold,
|
||||||
|
// color: Colors.black87,
|
||||||
|
// // color: barData.color, // use line color for label
|
||||||
|
// ),
|
||||||
|
// ),
|
||||||
|
// ),
|
||||||
|
// // Last Y value label
|
||||||
|
// Positioned(
|
||||||
|
// right: 10,
|
||||||
|
// top: (1 - (lastSpot.y - chartMinY) / (chartMaxY - chartMinY)) * chartHeight - 60,
|
||||||
|
// bottom: 0,
|
||||||
|
// // top: ((1 - (lastSpot.y - minY) / (maxY - minY)) * chartHeight)
|
||||||
|
// // .clamp(0.0, chartHeight - 20),
|
||||||
|
// child: Text(
|
||||||
|
// formatNumber(lastSpot.y),
|
||||||
|
// style: TextStyle(
|
||||||
|
// fontSize: 12,
|
||||||
|
// fontWeight: FontWeight.bold,
|
||||||
|
// // color: barData.color,
|
||||||
|
// color: Colors.black87,
|
||||||
|
// ),
|
||||||
|
// ),
|
||||||
|
// ),
|
||||||
|
// ],
|
||||||
|
// );
|
||||||
|
// }).toList(),
|
||||||
|
...lineBars.expand((barData) {
|
||||||
|
final List<FlSpot> spots = barData.spots;
|
||||||
|
final color = barData.color ?? Colors.black;
|
||||||
|
|
||||||
|
return spots.map((spot) {
|
||||||
|
final xPos = ((spot.x - minX) / (maxX - minX)) * chartWidth;
|
||||||
|
final yPos = (1 - (spot.y - chartMinY) / (chartMaxY - chartMinY)) * chartHeight;
|
||||||
|
// Prevent label from going outside on the left
|
||||||
|
double adjustedLeft = math.max(0, xPos - 30);
|
||||||
|
return Stack(
|
||||||
|
children: [
|
||||||
|
Positioned(
|
||||||
|
left: adjustedLeft, // fine-tune horizontal position
|
||||||
|
top: yPos - 60, // fine-tune vertical position
|
||||||
|
child: Text(
|
||||||
|
formatNumber(spot.y),
|
||||||
|
textAlign: TextAlign.right,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 9,
|
||||||
|
fontWeight: FontWeight.w500,
|
||||||
|
// color: color,
|
||||||
|
color: Colors.black,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
]
|
||||||
|
);
|
||||||
|
|
||||||
|
});
|
||||||
|
}).toList(),
|
||||||
|
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(height: 12),
|
||||||
|
Wrap( // <-- Legend added here
|
||||||
|
spacing: 12,
|
||||||
|
runSpacing: 8,
|
||||||
|
children: groupByValues.map((group) {
|
||||||
|
return Row(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
children: [
|
||||||
|
Container(width: 12, height: 12, color: groupColorMap[group]),
|
||||||
|
SizedBox(width: 6),
|
||||||
|
Text(
|
||||||
|
group,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 14,
|
||||||
|
fontFamily: context.translate('Roboto', 'NotoKufi'),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}).toList(),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// case 'd_chart_grouped_bar_horizantal':
|
||||||
// return DChartBar(
|
// return DChartBar(
|
||||||
// vertical: false, // <--- Important: rotate the chart
|
// vertical: false, // <--- Important: rotate the chart
|
||||||
// barGroupingType: BarGroupingType.grouped,
|
// barGroupingType: BarGroupingType.grouped,
|
||||||
@ -3175,30 +3564,6 @@ class ChartWidget extends StatelessWidget {
|
|||||||
// Iterate through each group and generate line data
|
// Iterate through each group and generate line data
|
||||||
for (String group in groupByValues) {
|
for (String group in groupByValues) {
|
||||||
print('lineGrp1');
|
print('lineGrp1');
|
||||||
|
|
||||||
// List<FlSpot> spots = filteredData
|
|
||||||
// .where((entry) => entry['ObsKey'][groupByKey] == group)
|
|
||||||
// .map<FlSpot>((entry) {
|
|
||||||
// print("FindTimePeriod");
|
|
||||||
// print(entry['ObsKey'][groupByKey]);
|
|
||||||
// double xValue = double.parse(entry['ObsKey']['TIME_PERIOD']);
|
|
||||||
// double yValue = double.parse(entry['ObsValue']['Value']);
|
|
||||||
// return FlSpot(xValue, yValue);
|
|
||||||
// }).toList();
|
|
||||||
|
|
||||||
// List<FlSpot> spots = filteredData
|
|
||||||
// .where((entry) => entry['ObsKey'][groupByKey] == group)
|
|
||||||
// .map<FlSpot>((entry) {
|
|
||||||
// String timePeriod = entry['ObsKey']['TIME_PERIOD'];
|
|
||||||
// print("FindTimePeriod: $timePeriod");
|
|
||||||
//
|
|
||||||
// double xValue = parseTimePeriodToDouble(timePeriod); // Convert to double for graph plotting
|
|
||||||
// double yValue = double.parse(entry['ObsValue']['Value']);
|
|
||||||
// print('TimePeriod: $timePeriod, xValue: $xValue, yValue: $yValue');
|
|
||||||
//
|
|
||||||
// return FlSpot(xValue, yValue);
|
|
||||||
// }).toList();
|
|
||||||
|
|
||||||
List<FlSpot> spots = filteredData
|
List<FlSpot> spots = filteredData
|
||||||
.where((entry) => entry['ObsKey'][groupByKey] == group)
|
.where((entry) => entry['ObsKey'][groupByKey] == group)
|
||||||
.map<FlSpot>((entry) {
|
.map<FlSpot>((entry) {
|
||||||
@ -3235,23 +3600,6 @@ class ChartWidget extends StatelessWidget {
|
|||||||
|
|
||||||
print('spots - $spots');
|
print('spots - $spots');
|
||||||
|
|
||||||
// lineChartLabel = spots;
|
|
||||||
|
|
||||||
// List<FlSpot> spots = filteredData
|
|
||||||
// .where((entry) => entry['ObsKey'][groupByKey] == group)
|
|
||||||
// .map<FlSpot>((entry) {
|
|
||||||
// String timePeriod = entry['ObsKey']['TIME_PERIOD'];
|
|
||||||
// List<String> parts = timePeriod.split('-'); // Split "2017-01" into ["2017", "01"]
|
|
||||||
//
|
|
||||||
// double year = double.parse(parts[0]); // Convert "2017" to 2017.0
|
|
||||||
// double month = double.parse(parts[1]) / 12; // Convert "01" to 1/12
|
|
||||||
//
|
|
||||||
// double xValue = year + month; // E.g., "2017-06" becomes 2017.5
|
|
||||||
// double yValue = double.parse(entry['ObsValue']['Value']);
|
|
||||||
//
|
|
||||||
// return FlSpot(xValue, yValue);
|
|
||||||
// }).toList();
|
|
||||||
|
|
||||||
print('lineGrp2');
|
print('lineGrp2');
|
||||||
// Add a line for this group
|
// Add a line for this group
|
||||||
lineBars.add(
|
lineBars.add(
|
||||||
|
|||||||
@ -1,5 +1,7 @@
|
|||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
|
|
||||||
|
import 'package:android_intent_plus/android_intent.dart';
|
||||||
|
import 'package:android_intent_plus/flag.dart';
|
||||||
import 'package:external_repos/external_repos.dart';
|
import 'package:external_repos/external_repos.dart';
|
||||||
import 'package:firebase_messaging/firebase_messaging.dart';
|
import 'package:firebase_messaging/firebase_messaging.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
@ -10,6 +12,7 @@ import 'package:go_router/go_router.dart';
|
|||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
import 'package:shared_preferences/shared_preferences.dart';
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
import 'package:the_validator/the_validator.dart';
|
import 'package:the_validator/the_validator.dart';
|
||||||
|
import 'package:uae_stat/config/app_links_helper.dart';
|
||||||
import 'package:uae_stat/config/connectivity_provider.dart';
|
import 'package:uae_stat/config/connectivity_provider.dart';
|
||||||
import 'package:uae_stat/config/my_theme.dart';
|
import 'package:uae_stat/config/my_theme.dart';
|
||||||
import 'package:uae_stat/domain/use_cases/auth_use_case.dart';
|
import 'package:uae_stat/domain/use_cases/auth_use_case.dart';
|
||||||
@ -257,6 +260,59 @@ class LoginRoute extends HookConsumerWidget {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _showAppLinkDialog(BuildContext context) {
|
||||||
|
showDialog(
|
||||||
|
context: context,
|
||||||
|
builder: (_) => AlertDialog(
|
||||||
|
title: const Text('Enable App Links'),
|
||||||
|
content: const Text(
|
||||||
|
'To enable links like www.fcsc.com to open in this app:\n\n'
|
||||||
|
'1. Tap "Open Settings".\n'
|
||||||
|
'2. Then tap on "Supported web addresses".\n'
|
||||||
|
'3. Make sure your domain is enabled.\n\n'
|
||||||
|
'This helps open web links directly in the app.',
|
||||||
|
),
|
||||||
|
actions: [
|
||||||
|
TextButton(
|
||||||
|
onPressed: () => Navigator.of(context).pop(),
|
||||||
|
child: const Text('Later'),
|
||||||
|
),
|
||||||
|
TextButton(
|
||||||
|
onPressed: () async {
|
||||||
|
Navigator.of(context).pop();
|
||||||
|
openAppLinkSettings();
|
||||||
|
|
||||||
|
// Optionally mark as shown so dialog doesn't show again
|
||||||
|
final prefs = await SharedPreferences.getInstance();
|
||||||
|
await prefs.setBool('supported_links_enabled', true);
|
||||||
|
},
|
||||||
|
child: const Text('Open Settings'),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void openAppLinkSettings() {
|
||||||
|
const packageName = 'ae.gov.fcsc.frontend'; // Replace with your app's package
|
||||||
|
final intent = AndroidIntent(
|
||||||
|
action: 'android.settings.APP_OPEN_BY_DEFAULT_SETTINGS',
|
||||||
|
data: 'package:$packageName',
|
||||||
|
flags: <int>[Flag.FLAG_ACTIVITY_NEW_TASK],
|
||||||
|
);
|
||||||
|
intent.launch();
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> checkAndShowDialogOnce(BuildContext context) async {
|
||||||
|
final prefs = await SharedPreferences.getInstance();
|
||||||
|
final shown = prefs.getBool('supported_links_enabled') ?? false;
|
||||||
|
|
||||||
|
if (!shown) {
|
||||||
|
_showAppLinkDialog(context);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context, WidgetRef ref) {
|
Widget build(BuildContext context, WidgetRef ref) {
|
||||||
ref.listen<AsyncValue<bool>>(connectivityProvider, (previous, hasInternet) {
|
ref.listen<AsyncValue<bool>>(connectivityProvider, (previous, hasInternet) {
|
||||||
@ -265,6 +321,23 @@ class LoginRoute extends HookConsumerWidget {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// useEffect(() {
|
||||||
|
// // Wait until first frame is rendered
|
||||||
|
// Future.microtask(() {
|
||||||
|
// checkAndShowDialogOnce(context);
|
||||||
|
// });
|
||||||
|
// return null;
|
||||||
|
// }, []);
|
||||||
|
|
||||||
|
// if(!isWeb){
|
||||||
|
// WidgetsBinding.instance.addPostFrameCallback((_) {
|
||||||
|
// AppLinksHelper.checkAndShowDialogOnce(context);
|
||||||
|
// });
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
final hasValidated = useState(false);
|
final hasValidated = useState(false);
|
||||||
final locale = ref.watch(localeProvider);
|
final locale = ref.watch(localeProvider);
|
||||||
final emailCtl = useTextEditingController();
|
final emailCtl = useTextEditingController();
|
||||||
@ -438,13 +511,15 @@ class LoginRoute extends HookConsumerWidget {
|
|||||||
hasValidated.value = true;
|
hasValidated.value = true;
|
||||||
final isValid = formKey.currentState!.validate();
|
final isValid = formKey.currentState!.validate();
|
||||||
if (!isValid) return;
|
if (!isValid) return;
|
||||||
|
var mailId = emailCtl.text;
|
||||||
|
final email = mailId.toLowerCase();
|
||||||
final session = await context.loaderWithErrorDialog(
|
final session = await context.loaderWithErrorDialog(
|
||||||
() => ref
|
() => ref
|
||||||
.read(
|
.read(
|
||||||
authUseCaseProvider.notifier,
|
authUseCaseProvider.notifier,
|
||||||
)
|
)
|
||||||
.login(
|
.login(
|
||||||
emailCtl.text,
|
email,
|
||||||
pwCtl.text,
|
pwCtl.text,
|
||||||
),
|
),
|
||||||
errorDialogBuilder: (
|
errorDialogBuilder: (
|
||||||
|
|||||||
@ -6,7 +6,9 @@ import FlutterMacOS
|
|||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
import app_links
|
import app_links
|
||||||
|
import app_settings
|
||||||
import connectivity_plus
|
import connectivity_plus
|
||||||
|
import device_info_plus
|
||||||
import file_selector_macos
|
import file_selector_macos
|
||||||
import firebase_core
|
import firebase_core
|
||||||
import firebase_messaging
|
import firebase_messaging
|
||||||
@ -21,7 +23,9 @@ import webview_flutter_wkwebview
|
|||||||
|
|
||||||
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
|
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
|
||||||
AppLinksMacosPlugin.register(with: registry.registrar(forPlugin: "AppLinksMacosPlugin"))
|
AppLinksMacosPlugin.register(with: registry.registrar(forPlugin: "AppLinksMacosPlugin"))
|
||||||
|
AppSettingsPlugin.register(with: registry.registrar(forPlugin: "AppSettingsPlugin"))
|
||||||
ConnectivityPlusPlugin.register(with: registry.registrar(forPlugin: "ConnectivityPlusPlugin"))
|
ConnectivityPlusPlugin.register(with: registry.registrar(forPlugin: "ConnectivityPlusPlugin"))
|
||||||
|
DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin"))
|
||||||
FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin"))
|
FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin"))
|
||||||
FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin"))
|
FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin"))
|
||||||
FLTFirebaseMessagingPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseMessagingPlugin"))
|
FLTFirebaseMessagingPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseMessagingPlugin"))
|
||||||
|
|||||||
50
pubspec.lock
50
pubspec.lock
@ -33,6 +33,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.12.0"
|
version: "0.12.0"
|
||||||
|
android_intent_plus:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: android_intent_plus
|
||||||
|
sha256: dfc1fd3a577205ae8f11e990fb4ece8c90cceabbee56fcf48e463ecf0bd6aae3
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "5.3.0"
|
||||||
ansicolor:
|
ansicolor:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -73,6 +81,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.4"
|
version: "1.0.4"
|
||||||
|
app_settings:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: app_settings
|
||||||
|
sha256: "3e46c561441e5820d3a25339bf8b51b9e45a5f686873851a20c257a530917795"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "6.1.1"
|
||||||
archive:
|
archive:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -377,6 +393,22 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.7.11"
|
version: "0.7.11"
|
||||||
|
device_info_plus:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: device_info_plus
|
||||||
|
sha256: "0c6396126421b590089447154c5f98a5de423b70cfb15b1578fd018843ee6f53"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "11.4.0"
|
||||||
|
device_info_plus_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: device_info_plus_platform_interface
|
||||||
|
sha256: "0b04e02b30791224b31969eb1b50d723498f402971bff3630bca2ba839bd1ed2"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "7.0.2"
|
||||||
dio:
|
dio:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -444,10 +476,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: ffi
|
name: ffi
|
||||||
sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6"
|
sha256: "289279317b4b16eb2bb7e271abccd4bf84ec9bdcbe999e278a94b804f5630418"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.3"
|
version: "2.1.4"
|
||||||
file:
|
file:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -1763,10 +1795,18 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: win32
|
name: win32
|
||||||
sha256: daf97c9d80197ed7b619040e86c8ab9a9dad285e7671ee7390f9180cc828a51e
|
sha256: "329edf97fdd893e0f1e3b9e88d6a0e627128cc17cc316a8d67fda8f1451178ba"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "5.10.1"
|
version: "5.13.0"
|
||||||
|
win32_registry:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: win32_registry
|
||||||
|
sha256: "6f1b564492d0147b330dd794fee8f512cec4977957f310f9951b5f9d83618dae"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.1.0"
|
||||||
xdg_directories:
|
xdg_directories:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -1792,5 +1832,5 @@ packages:
|
|||||||
source: hosted
|
source: hosted
|
||||||
version: "3.1.3"
|
version: "3.1.3"
|
||||||
sdks:
|
sdks:
|
||||||
dart: ">=3.7.0-0 <4.0.0"
|
dart: ">=3.7.0 <4.0.0"
|
||||||
flutter: ">=3.27.0"
|
flutter: ">=3.27.0"
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
name: uae_stat
|
name: uae_stat
|
||||||
description: "View statistics about the UAE from the Federal Center for Statistics and Competitiveness."
|
description: "View statistics about the UAE from the Federal Center for Statistics and Competitiveness."
|
||||||
publish_to: "none"
|
publish_to: "none"
|
||||||
#version: 1.0.55+56
|
#version: 1.0.58+59
|
||||||
version: 1.0.3+4
|
version: 1.0.4+5
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
sdk: ">=3.2.3 <4.0.0"
|
sdk: ">=3.2.3 <4.0.0"
|
||||||
@ -72,6 +72,9 @@ dependencies:
|
|||||||
d_chart: ^2.10.5
|
d_chart: ^2.10.5
|
||||||
firebase_core: ^3.13.0
|
firebase_core: ^3.13.0
|
||||||
firebase_messaging: ^15.2.5
|
firebase_messaging: ^15.2.5
|
||||||
|
device_info_plus: ^11.4.0
|
||||||
|
android_intent_plus: ^5.3.0
|
||||||
|
app_settings: ^6.1.1
|
||||||
|
|
||||||
dependency_overrides:
|
dependency_overrides:
|
||||||
fading_edge_scrollview: ^4.1.1
|
fading_edge_scrollview: ^4.1.1
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user