case sensitive

This commit is contained in:
Surendiran 2025-06-04 16:52:11 +05:30
parent 80d7357ff9
commit 1619cb25dd
18 changed files with 749 additions and 175 deletions

View File

@ -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
A
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  ¥ü¿<EFBFBD>è2  £ŸÐõã2„
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  ÷<EFBFBD>“„ñ2  £ŸÐõã2„
<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
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
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>
/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|
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
_/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

View File

@ -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
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
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
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~
|
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>
/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
_/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

View File

@ -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
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
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
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
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
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>
/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
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
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
_/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

View File

@ -2,27 +2,27 @@ C/C++ Structured Log
<EFBFBD>
/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86_64/additional_project_files.txtC
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
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
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
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
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
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
_/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

View File

@ -20,12 +20,12 @@ if (project.hasProperty('google-services.json')) {
def flutterVersionCode = localProperties.getProperty("flutter.versionCode")
if (flutterVersionCode == null) {
flutterVersionCode = "56"
flutterVersionCode = "59"
}
def flutterVersionName = localProperties.getProperty("flutter.versionName")
if (flutterVersionName == null) {
flutterVersionName = "1.0.55"
flutterVersionName = "1.0.58"
}
def keystorePropertiesFile = rootProject.file("key.properties")

View File

@ -14,6 +14,16 @@ allprojects {
google()
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"

View File

@ -1,8 +1,12 @@
PODS:
- app_links (0.0.2):
- Flutter
- app_settings (5.1.1):
- Flutter
- connectivity_plus (0.0.1):
- Flutter
- device_info_plus (0.0.1):
- Flutter
- Firebase/CoreOnly (11.10.0):
- FirebaseCore (~> 11.10.0)
- Firebase/Messaging (11.10.0):
@ -99,7 +103,9 @@ PODS:
DEPENDENCIES:
- app_links (from `.symlinks/plugins/app_links/ios`)
- app_settings (from `.symlinks/plugins/app_settings/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_messaging (from `.symlinks/plugins/firebase_messaging/ios`)
- Flutter (from `Flutter`)
@ -130,8 +136,12 @@ SPEC REPOS:
EXTERNAL SOURCES:
app_links:
:path: ".symlinks/plugins/app_links/ios"
app_settings:
:path: ".symlinks/plugins/app_settings/ios"
connectivity_plus:
:path: ".symlinks/plugins/connectivity_plus/ios"
device_info_plus:
:path: ".symlinks/plugins/device_info_plus/ios"
firebase_core:
:path: ".symlinks/plugins/firebase_core/ios"
firebase_messaging:
@ -163,7 +173,9 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS:
app_links: 76b66b60cc809390ca1ad69bfd66b998d2387ac7
app_settings: 5127ae0678de1dcc19f2293271c51d37c89428b2
connectivity_plus: cb623214f4e1f6ef8fe7403d580fdad517d2f7dd
device_info_plus: 21fcca2080fbcd348be798aa36c3e5ed849eefbe
Firebase: 1fe1c0a7d9aaea32efe01fbea5f0ebd8d70e53a2
firebase_core: 2d4534e7b489907dcede540c835b48981d890943
firebase_messaging: 75bc93a4df25faccad67f6662ae872ac9ae69b64

View File

@ -322,14 +322,10 @@
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
);
inputPaths = (
);
name = "[CP] Embed Pods Frameworks";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
);
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
@ -358,14 +354,10 @@
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist",
);
inputPaths = (
);
name = "[CP] Copy Pods Resources";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist",
);
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
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_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
CURRENT_PROJECT_VERSION = 5;
DEVELOPMENT_ASSET_PATHS = Runner/Assets.xcassets;
DEVELOPMENT_TEAM = 9N5SRFUGK2;
ENABLE_BITCODE = NO;
@ -517,7 +509,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0.3;
MARKETING_VERSION = 1.0.4;
PRODUCT_BUNDLE_IDENTIFIER = ae.gov.fcsc.frontend.ios;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
@ -705,7 +697,7 @@
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
CURRENT_PROJECT_VERSION = 5;
DEVELOPMENT_ASSET_PATHS = Runner/Assets.xcassets;
DEVELOPMENT_TEAM = 9N5SRFUGK2;
ENABLE_BITCODE = NO;
@ -716,7 +708,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0.3;
MARKETING_VERSION = 1.0.4;
PRODUCT_BUNDLE_IDENTIFIER = ae.gov.fcsc.frontend.ios;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
@ -742,7 +734,7 @@
CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
CURRENT_PROJECT_VERSION = 5;
DEVELOPMENT_ASSET_PATHS = Runner/Assets.xcassets;
DEVELOPMENT_TEAM = 9N5SRFUGK2;
ENABLE_BITCODE = NO;
@ -753,7 +745,7 @@
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 1.0.3;
MARKETING_VERSION = 1.0.4;
PRODUCT_BUNDLE_IDENTIFIER = ae.gov.fcsc.frontend.ios;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";

View File

@ -68,7 +68,7 @@
<string>remote-notification</string>
</array>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen.storyboard</string>
<string>LaunchScreen</string>
<key>UIMainStoryboardFile</key>
<string>Main</string>
<key>UIStatusBarHidden</key>
@ -79,10 +79,10 @@
</array>
<key>UISupportedInterfaceOrientations~ipad</key>
<array>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
<string>UIInterfaceOrientationPortrait</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
<string>UIInterfaceOrientationLandscapeLeft</string>
<string>UIInterfaceOrientationLandscapeRight</string>
<string>UIInterfaceOrientationPortraitUpsideDown</string>
</array>
<key>UNUserNotificationCenterDelegate</key>
<string>YES</string>

View 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();
}
}

View File

@ -242,7 +242,7 @@ class _UaenumberWidgetState extends ConsumerState<uaenumberWidget> {
color: Color(0xFFAA8E83),
fontFamily: context.translate('Roboto', 'NotoKufi'),
fontSize: 14,
height: 2.0,
// height: 1.8,
),
prefixIconConstraints: BoxConstraints(
maxWidth: 42,
@ -272,7 +272,7 @@ class _UaenumberWidgetState extends ConsumerState<uaenumberWidget> {
},
)
: null,
contentPadding: EdgeInsets.symmetric(vertical: 9, horizontal: 18.0),
contentPadding: EdgeInsets.symmetric(vertical: 12, horizontal: 18.0),
border: InputBorder.none,
// contentPadding:
// EdgeInsets.symmetric(vertical: 9, horizontal: 18.0),

View File

@ -235,10 +235,13 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
final adminToken = adminAuth.token;
print('adminTokenREgistration- ${adminToken}');
var mailId = _emailController.text;
final email = mailId.toLowerCase();
print('LowerCase $email');
// Create user in PocketBase
final response = await pb.collection('users').create(body: {
'uname': _usernameController.text,
'email': _emailController.text,
'email': email,
'password': _passwordController.text,
'passwordConfirm': _passwordController.text,
'status': 'Pending',

View File

@ -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) {
// if (cardData.any((item) =>
// 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
Color _getColorFromHex(String hexColor) {

View File

@ -1,5 +1,6 @@
import 'dart:convert';
import 'dart:math';
import 'dart:math' as math;
import 'package:fl_chart/fl_chart.dart';
import 'package:flutter/foundation.dart';
@ -315,9 +316,9 @@ class ChartWidget extends StatelessWidget {
// color: adjustColor(bodyColor, index), // Adjust alpha dynamically
color: uniqueColors[index % uniqueColors.length],
// title: '${percentage.toStringAsFixed(1)}%',
title: percentage >= 0.1 ? '${percentage.toStringAsFixed(1)}%' : '',
// title: percentage >= 0.1 ? '$displayTitle\n${percentage.toStringAsFixed(1)}%' : '',
radius: isTouched ? 70 : 50,
// title: percentage >= 0.1 ? '${percentage.toStringAsFixed(1)}%' : '',
title: percentage >= 0.1 ? '$displayTitle\n${percentage.toStringAsFixed(1)}%' : '',
radius: isTouched ? 60 : 50,
// Increase size when touched
titleStyle: TextStyle(
@ -330,8 +331,8 @@ class ChartWidget extends StatelessWidget {
color: Colors.black,
// color: Colors.white,
),
titlePositionPercentageOffset: 1.4,
// titlePositionPercentageOffset: 1.7,
// titlePositionPercentageOffset: 1.4,
titlePositionPercentageOffset: 1.8,
);
}).toList();
}
@ -2948,7 +2949,395 @@ class ChartWidget extends StatelessWidget {
_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(
// vertical: false, // <--- Important: rotate the chart
// barGroupingType: BarGroupingType.grouped,
@ -3175,30 +3564,6 @@ class ChartWidget extends StatelessWidget {
// Iterate through each group and generate line data
for (String group in groupByValues) {
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
.where((entry) => entry['ObsKey'][groupByKey] == group)
.map<FlSpot>((entry) {
@ -3235,23 +3600,6 @@ class ChartWidget extends StatelessWidget {
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');
// Add a line for this group
lineBars.add(

View File

@ -1,5 +1,7 @@
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:firebase_messaging/firebase_messaging.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:shared_preferences/shared_preferences.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/my_theme.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
Widget build(BuildContext context, WidgetRef ref) {
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 locale = ref.watch(localeProvider);
final emailCtl = useTextEditingController();
@ -438,13 +511,15 @@ class LoginRoute extends HookConsumerWidget {
hasValidated.value = true;
final isValid = formKey.currentState!.validate();
if (!isValid) return;
var mailId = emailCtl.text;
final email = mailId.toLowerCase();
final session = await context.loaderWithErrorDialog(
() => ref
.read(
authUseCaseProvider.notifier,
)
.login(
emailCtl.text,
email,
pwCtl.text,
),
errorDialogBuilder: (

View File

@ -6,7 +6,9 @@ import FlutterMacOS
import Foundation
import app_links
import app_settings
import connectivity_plus
import device_info_plus
import file_selector_macos
import firebase_core
import firebase_messaging
@ -21,7 +23,9 @@ import webview_flutter_wkwebview
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
AppLinksMacosPlugin.register(with: registry.registrar(forPlugin: "AppLinksMacosPlugin"))
AppSettingsPlugin.register(with: registry.registrar(forPlugin: "AppSettingsPlugin"))
ConnectivityPlusPlugin.register(with: registry.registrar(forPlugin: "ConnectivityPlusPlugin"))
DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin"))
FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin"))
FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin"))
FLTFirebaseMessagingPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseMessagingPlugin"))

View File

@ -33,6 +33,14 @@ packages:
url: "https://pub.dev"
source: hosted
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:
dependency: transitive
description:
@ -73,6 +81,14 @@ packages:
url: "https://pub.dev"
source: hosted
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:
dependency: transitive
description:
@ -377,6 +393,22 @@ packages:
url: "https://pub.dev"
source: hosted
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:
dependency: transitive
description:
@ -444,10 +476,10 @@ packages:
dependency: transitive
description:
name: ffi
sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6"
sha256: "289279317b4b16eb2bb7e271abccd4bf84ec9bdcbe999e278a94b804f5630418"
url: "https://pub.dev"
source: hosted
version: "2.1.3"
version: "2.1.4"
file:
dependency: transitive
description:
@ -1763,10 +1795,18 @@ packages:
dependency: transitive
description:
name: win32
sha256: daf97c9d80197ed7b619040e86c8ab9a9dad285e7671ee7390f9180cc828a51e
sha256: "329edf97fdd893e0f1e3b9e88d6a0e627128cc17cc316a8d67fda8f1451178ba"
url: "https://pub.dev"
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:
dependency: transitive
description:
@ -1792,5 +1832,5 @@ packages:
source: hosted
version: "3.1.3"
sdks:
dart: ">=3.7.0-0 <4.0.0"
dart: ">=3.7.0 <4.0.0"
flutter: ">=3.27.0"

View File

@ -1,8 +1,8 @@
name: uae_stat
description: "View statistics about the UAE from the Federal Center for Statistics and Competitiveness."
publish_to: "none"
#version: 1.0.55+56
version: 1.0.3+4
#version: 1.0.58+59
version: 1.0.4+5
environment:
sdk: ">=3.2.3 <4.0.0"
@ -72,6 +72,9 @@ dependencies:
d_chart: ^2.10.5
firebase_core: ^3.13.0
firebase_messaging: ^15.2.5
device_info_plus: ^11.4.0
android_intent_plus: ^5.3.0
app_settings: ^6.1.1
dependency_overrides:
fading_edge_scrollview: ^4.1.1