Google and Apple OAthu

This commit is contained in:
Surendiran 2025-08-04 09:33:26 +05:30
parent 5fbc97c1fb
commit fe712c6708
29 changed files with 2425 additions and 1632 deletions

View File

@ -2,27 +2,27 @@ C/C++ Structured Log}
{
y/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/arm64-v8a/additional_project_files.txtC
A
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  …Žœÿƒ3  ¡¹ñÀ÷2z
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  <EFBFBD>àÕ€„3  ¡¹ñÀ÷2z
x
v/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/arm64-v8a/android_gradle_build.json  …Žœÿƒ3 £¹ñÀ÷2
v/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/arm64-v8a/android_gradle_build.json  <EFBFBD>àÕ€„3 £¹ñÀ÷2
}
{/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/arm64-v8a/android_gradle_build_mini.json  …Žœÿƒ3ƒ ¥¹ñÀ÷2l
{/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/arm64-v8a/android_gradle_build_mini.json  <EFBFBD>àÕ€„3ƒ ¥¹ñÀ÷2l
j
h/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/arm64-v8a/build.ninja  …Žœÿƒ3êÌ ޹ñÀ÷2p
h/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/arm64-v8a/build.ninja  <EFBFBD>àÕ€„3êÌ ޹ñÀ÷2p
n
l/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/arm64-v8a/build.ninja.txt  …Žœÿƒ3u
l/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/arm64-v8a/build.ninja.txt  <EFBFBD>àÕ€„3u
s
q/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/arm64-v8a/build_file_index.txt  …Žœÿƒ3 _ ¦¹ñÀ÷2v
q/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/arm64-v8a/build_file_index.txt  <EFBFBD>àÕ€„3 _ ¦¹ñÀ÷2v
t
r/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/arm64-v8a/compile_commands.json  …Žœÿƒ3z
r/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/arm64-v8a/compile_commands.json  <EFBFBD>àÕ€„3z
x
v/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/arm64-v8a/compile_commands.json.bin  …Žœÿƒ3
v/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/arm64-v8a/compile_commands.json.bin  <EFBFBD>àÕ€„3
~
|/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/arm64-v8a/metadata_generation_command.txt  …Žœÿƒ3
|/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/arm64-v8a/metadata_generation_command.txt  <EFBFBD>àÕ€„3
ö ¦¹ñÀ÷2s
q
o/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/arm64-v8a/prefab_config.json  …Žœÿƒ3  ( ¦¹ñÀ÷2x
o/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/arm64-v8a/prefab_config.json  <EFBFBD>àÕ€„3  ( ¦¹ñÀ÷2x
v
t/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/arm64-v8a/symbol_folder_index.txt  …Žœÿƒ3  k ¦¹ñÀ÷2c
t/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/arm64-v8a/symbol_folder_index.txt  <EFBFBD>àÕ€„3  k ¦¹ñÀ÷2c
a
_/Users/venbateam/Documents/flutter/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt  …Žœÿƒ3 ¤ òÑÞ€á2
_/Users/venbateam/Documents/flutter/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt  <EFBFBD>àÕ€„3 ¤ òÑÞ€á2

View File

@ -2,27 +2,27 @@ C/C++ Structured Log
}
{/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/armeabi-v7a/additional_project_files.txtC
A
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  <EFBFBD>œÿƒ3  ¸ïòÀ÷2|
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  ±àÕ€„3  ¸ïòÀ÷2|
z
x/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/armeabi-v7a/android_gradle_build.json  <EFBFBD>œÿƒ3 ºïòÀ÷2<C3B7>
x/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/armeabi-v7a/android_gradle_build.json  ±àÕ€„3 ºïòÀ÷2<C3B7>

}/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/armeabi-v7a/android_gradle_build_mini.json  <EFBFBD>œÿƒ3 »ïòÀ÷2n
}/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/armeabi-v7a/android_gradle_build_mini.json  ±àÕ€„3 »ïòÀ÷2n
l
j/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/armeabi-v7a/build.ninja  <EFBFBD>œÿƒ3öÌ ªïòÀ÷2r
j/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/armeabi-v7a/build.ninja  ±àÕ€„3öÌ ªïòÀ÷2r
p
n/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/armeabi-v7a/build.ninja.txt  <EFBFBD>œÿƒ3w
n/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/armeabi-v7a/build.ninja.txt  ±àÕ€„3w
u
s/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/armeabi-v7a/build_file_index.txt  <EFBFBD>œÿƒ3 _ »ïòÀ÷2x
s/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/armeabi-v7a/build_file_index.txt  ±àÕ€„3 _ »ïòÀ÷2x
v
t/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/armeabi-v7a/compile_commands.json  <EFBFBD>œÿƒ3|
t/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/armeabi-v7a/compile_commands.json  ±àÕ€„3|
z
x/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/armeabi-v7a/compile_commands.json.bin  <EFBFBD>œÿƒ3 ƒ
x/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/armeabi-v7a/compile_commands.json.bin  ±àÕ€„3 ƒ

~/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/armeabi-v7a/metadata_generation_command.txt  <EFBFBD>œÿƒ3
~/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/armeabi-v7a/metadata_generation_command.txt  ±àÕ€„3
€ »ïòÀ÷2u
s
q/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/armeabi-v7a/prefab_config.json  <EFBFBD>œÿƒ3  ( »ïòÀ÷2z
q/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/armeabi-v7a/prefab_config.json  ±àÕ€„3  ( »ïòÀ÷2z
x
v/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/armeabi-v7a/symbol_folder_index.txt  <EFBFBD>œÿƒ3  m »ïòÀ÷2c
v/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/armeabi-v7a/symbol_folder_index.txt  ±àÕ€„3  m »ïòÀ÷2c
a
_/Users/venbateam/Documents/flutter/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt  <EFBFBD>œÿƒ3 ¤ òÑÞ€á2
_/Users/venbateam/Documents/flutter/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt  ±àÕ€„3 ¤ òÑÞ€á2

View File

@ -2,27 +2,27 @@ C/C++ Structured Logw
u
s/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/x86/additional_project_files.txtC
A
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  Œ<EFBFBD>œÿƒ3  „òòÀ÷2t
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  ¿àÕ€„3  „òòÀ÷2t
r
p/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/x86/android_gradle_build.json  Œ<EFBFBD>œÿƒ3ô „òòÀ÷2y
p/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/x86/android_gradle_build.json  ¿àÕ€„3ô „òòÀ÷2y
w
u/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/x86/android_gradle_build_mini.json  Œ<EFBFBD>œÿƒ3÷ …òòÀ÷2f
u/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/x86/android_gradle_build_mini.json  ¿àÕ€„3÷ …òòÀ÷2f
d
b/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/x86/build.ninja  Œ<EFBFBD>œÿƒ3ÆÌ ûñòÀ÷2j
b/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/x86/build.ninja  ¿àÕ€„3ÆÌ ûñòÀ÷2j
h
f/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/x86/build.ninja.txt  Œ<EFBFBD>œÿƒ3o
f/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/x86/build.ninja.txt  ¿àÕ€„3o
m
k/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/x86/build_file_index.txt  Œ<EFBFBD>œÿƒ3 _ …òòÀ÷2p
k/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/x86/build_file_index.txt  ¿àÕ€„3 _ …òòÀ÷2p
n
l/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/x86/compile_commands.json  Œ<EFBFBD>œÿƒ3t
l/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/x86/compile_commands.json  ¿àÕ€„3t
r
p/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/x86/compile_commands.json.bin  Œ<EFBFBD>œÿƒ3 z
p/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/x86/compile_commands.json.bin  ¿àÕ€„3 z
x
v/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/x86/metadata_generation_command.txt  Œ<EFBFBD>œÿƒ3
v/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/x86/metadata_generation_command.txt  ¿àÕ€„3
Ø …òòÀ÷2m
k
i/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/x86/prefab_config.json  Œ<EFBFBD>œÿƒ3  ( …òòÀ÷2r
i/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/x86/prefab_config.json  ¿àÕ€„3  ( …òòÀ÷2r
p
n/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/x86/symbol_folder_index.txt  Œ<EFBFBD>œÿƒ3  e …òòÀ÷2c
n/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/x86/symbol_folder_index.txt  ¿àÕ€„3  e …òòÀ÷2c
a
_/Users/venbateam/Documents/flutter/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt  Œ<EFBFBD>œÿƒ3 ¤ òÑÞ€á2
_/Users/venbateam/Documents/flutter/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt  ¿àÕ€„3 ¤ òÑÞ€á2

View File

@ -2,27 +2,27 @@ C/C++ Structured Logz
x
v/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/x86_64/additional_project_files.txtC
A
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  <EFBFBD>œÿƒ3  •ôòÀ÷2w
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  ÊàÕ€„3  •ôòÀ÷2w
u
s/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/x86_64/android_gradle_build.json  <EFBFBD>œÿƒ3ú •ôòÀ÷2|
s/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/x86_64/android_gradle_build.json  ÊàÕ€„3ú •ôòÀ÷2|
z
x/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/x86_64/android_gradle_build_mini.json  <EFBFBD>œÿƒ3ý ôòÀ÷2i
x/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/x86_64/android_gradle_build_mini.json  ÊàÕ€„3ý ôòÀ÷2i
g
e/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/x86_64/build.ninja  <EFBFBD>œÿƒ3ØÌ <20>ôòÀ÷2m
e/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/x86_64/build.ninja  ÊàÕ€„3ØÌ <20>ôòÀ÷2m
k
i/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/x86_64/build.ninja.txt  <EFBFBD>œÿƒ3r
i/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/x86_64/build.ninja.txt  ÊàÕ€„3r
p
n/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/x86_64/build_file_index.txt  <EFBFBD>œÿƒ3 _ ôòÀ÷2s
n/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/x86_64/build_file_index.txt  ÊàÕ€„3 _ ôòÀ÷2s
q
o/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/x86_64/compile_commands.json  <EFBFBD>œÿƒ3w
o/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/x86_64/compile_commands.json  ÊàÕ€„3w
u
s/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/x86_64/compile_commands.json.bin  <EFBFBD>œÿƒ3 }
s/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/x86_64/compile_commands.json.bin  ÊàÕ€„3 }
{
y/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/x86_64/metadata_generation_command.txt  <EFBFBD>œÿƒ3
y/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/x86_64/metadata_generation_command.txt  ÊàÕ€„3
ç ôòÀ÷2p
n
l/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/x86_64/prefab_config.json  <EFBFBD>œÿƒ3  ( ôòÀ÷2u
l/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/x86_64/prefab_config.json  ÊàÕ€„3  ( ôòÀ÷2u
s
q/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/x86_64/symbol_folder_index.txt  <EFBFBD>œÿƒ3  h ôòÀ÷2c
q/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/x86_64/symbol_folder_index.txt  ÊàÕ€„3  h ôòÀ÷2c
a
_/Users/venbateam/Documents/flutter/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt  <EFBFBD>œÿƒ3 ¤ òÑÞ€á2
_/Users/venbateam/Documents/flutter/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt  ÊàÕ€„3 ¤ òÑÞ€á2

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>׆3  ™ªÇŸô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>׆3 œªÇŸô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>׆3 ¤ªÇŸô2u
s
q/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/arm64-v8a/build.ninja  ©¥<EFBFBD>û2²Í ù©ÇŸô2y
q/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/arm64-v8a/build.ninja  Á÷<EFBFBD>׆3²Í ù©ÇŸô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>׆3~
|
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>׆3 _ ¥ªÇŸô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>׆3
<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>׆3 
ˆ
/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>׆3
š ¥ªÇŸô2|
z
x/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/arm64-v8a/prefab_config.json  ©¥<EFBFBD>û2  ( ¥ªÇŸô2<C3B4>
x/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/arm64-v8a/prefab_config.json  Á÷<EFBFBD>׆3  ( ¥ªÇŸô2<C3B4>

}/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>׆3  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>׆3 ¤ òÑÞ€á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  Ü÷<EFBFBD>׆3  £¼ÇŸô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  Ü÷<EFBFBD>׆3 ¤¼ÇŸô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  Ü÷<EFBFBD>׆3 ¥¼ÇŸô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  Ü÷<EFBFBD>׆3¾Í ¼ÇŸô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  Ü÷<EFBFBD>׆3
~
|/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/armeabi-v7a/build_file_index.txt  º¥<EFBFBD>û2 _ ¦¼ÇŸô2<C3B4>
|/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/armeabi-v7a/build_file_index.txt  Ü÷<EFBFBD>׆3 _ ¦¼ÇŸô2<C3B4>

}/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  Ü÷<EFBFBD>׆3

<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  Ü÷<EFBFBD>׆3 <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  Ü÷<EFBFBD>׆3
¤ ¥¼ÇŸô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  Ü÷<EFBFBD>׆3  ( ¦¼ÇŸô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  Ü÷<EFBFBD>׆3  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  Ü÷<EFBFBD>׆3 ¤ òÑÞ€á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  é÷<EFBFBD>׆3  µÂÇŸô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  é÷<EFBFBD>׆3 ·ÂÇŸô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  é÷<EFBFBD>׆3 ¸ÂÇŸô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  é÷<EFBFBD>׆3ŽÍ ¨ÂÇŸô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  é÷<EFBFBD>׆3x
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  é÷<EFBFBD>׆3 _ ¹ÂÇŸô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  é÷<EFBFBD>׆3}
{
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  é÷<EFBFBD>׆3
<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  é÷<EFBFBD>׆3
ü ¹ÂÇŸô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  é÷<EFBFBD>׆3  ( ¹ÂÇŸô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  é÷<EFBFBD>׆3  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  é÷<EFBFBD>׆3 ¤ òÑÞ€á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  ð÷<EFBFBD>׆3  ·ÆÇŸô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  ð÷<EFBFBD>׆3Œ ¸ÆÇŸô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  ð÷<EFBFBD>׆3<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  ð÷<EFBFBD>׆3 Í §ÆÇŸô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  ð÷<EFBFBD>׆3{
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  ð÷<EFBFBD>׆3 _ ¹ÆÇŸô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  ð÷<EFBFBD>׆3
~
|/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  ð÷<EFBFBD>׆3 ˆ

/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  ð÷<EFBFBD>׆3
 ¹ÆÇŸô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  ð÷<EFBFBD>׆3  ( ¹ÆÇŸô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  ð÷<EFBFBD>׆3  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  ð÷<EFBFBD>׆3 ¤ òÑÞ€á2

View File

@ -3,6 +3,16 @@ PODS:
- Flutter
- app_settings (5.1.1):
- Flutter
- AppAuth (2.0.0):
- AppAuth/Core (= 2.0.0)
- AppAuth/ExternalUserAgent (= 2.0.0)
- AppAuth/Core (2.0.0)
- AppAuth/ExternalUserAgent (2.0.0):
- AppAuth/Core
- AppCheckCore (11.2.0):
- GoogleUtilities/Environment (~> 8.0)
- GoogleUtilities/UserDefaults (~> 8.0)
- PromisesObjC (~> 2.4)
- appsflyer_sdk (6.16.2):
- AppsFlyerFramework (= 6.16.2)
- Flutter
@ -53,9 +63,19 @@ PODS:
- FlutterMacOS
- fluttertoast (0.0.2):
- Flutter
- google_sign_in_ios (0.0.1):
- Flutter
- FlutterMacOS
- GoogleSignIn (~> 9.0)
- GTMSessionFetcher (>= 3.4.0)
- GoogleDataTransport (10.1.0):
- nanopb (~> 3.30910.0)
- PromisesObjC (~> 2.4)
- GoogleSignIn (9.0.0):
- AppAuth (~> 2.0)
- AppCheckCore (~> 11.0)
- GTMAppAuth (~> 5.0)
- GTMSessionFetcher/Core (~> 3.3)
- GoogleUtilities/AppDelegateSwizzler (8.0.2):
- GoogleUtilities/Environment
- GoogleUtilities/Logger
@ -80,6 +100,14 @@ PODS:
- GoogleUtilities/UserDefaults (8.0.2):
- GoogleUtilities/Logger
- GoogleUtilities/Privacy
- GTMAppAuth (5.0.0):
- AppAuth/Core (~> 2.0)
- GTMSessionFetcher/Core (< 4.0, >= 3.3)
- GTMSessionFetcher (3.5.0):
- GTMSessionFetcher/Full (= 3.5.0)
- GTMSessionFetcher/Core (3.5.0)
- GTMSessionFetcher/Full (3.5.0):
- GTMSessionFetcher/Core
- image_picker_ios (0.0.1):
- Flutter
- nanopb (3.30910.0):
@ -119,6 +147,7 @@ DEPENDENCIES:
- flutter_native_splash (from `.symlinks/plugins/flutter_native_splash/ios`)
- flutter_secure_storage_darwin (from `.symlinks/plugins/flutter_secure_storage_darwin/darwin`)
- fluttertoast (from `.symlinks/plugins/fluttertoast/ios`)
- google_sign_in_ios (from `.symlinks/plugins/google_sign_in_ios/darwin`)
- image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`)
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
- path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
@ -130,6 +159,8 @@ DEPENDENCIES:
SPEC REPOS:
trunk:
- AppAuth
- AppCheckCore
- AppsFlyerFramework
- Firebase
- FirebaseCore
@ -137,7 +168,10 @@ SPEC REPOS:
- FirebaseInstallations
- FirebaseMessaging
- GoogleDataTransport
- GoogleSignIn
- GoogleUtilities
- GTMAppAuth
- GTMSessionFetcher
- nanopb
- PromisesObjC
@ -164,6 +198,8 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/flutter_secure_storage_darwin/darwin"
fluttertoast:
:path: ".symlinks/plugins/fluttertoast/ios"
google_sign_in_ios:
:path: ".symlinks/plugins/google_sign_in_ios/darwin"
image_picker_ios:
:path: ".symlinks/plugins/image_picker_ios/ios"
package_info_plus:
@ -184,6 +220,8 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS:
app_links: 76b66b60cc809390ca1ad69bfd66b998d2387ac7
app_settings: 5127ae0678de1dcc19f2293271c51d37c89428b2
AppAuth: 1c1a8afa7e12f2ec3a294d9882dfa5ab7d3cb063
AppCheckCore: cc8fd0a3a230ddd401f326489c99990b013f0c4f
appsflyer_sdk: ebe94dc3f00b07bdd001251dbc87879bda3c494a
AppsFlyerFramework: fe5303bffcdfd941d5f570c2d21eaaea982e7bdc
connectivity_plus: cb623214f4e1f6ef8fe7403d580fdad517d2f7dd
@ -199,8 +237,12 @@ SPEC CHECKSUMS:
flutter_native_splash: 6cad9122ea0fad137d23137dd14b937f3e90b145
flutter_secure_storage_darwin: ce237a8775b39723566dc72571190a3769d70468
fluttertoast: 2c67e14dce98bbdb200df9e1acf610d7a6264ea1
google_sign_in_ios: 205742c688aea0e64db9da03c33121694a365109
GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7
GoogleSignIn: c7f09cfbc85a1abf69187be091997c317cc33b77
GoogleUtilities: 26a3abef001b6533cf678d3eb38fd3f614b7872d
GTMAppAuth: 217a876b249c3c585a54fd6f73e6b58c4f5c4238
GTMSessionFetcher: 5aea5ba6bd522a239e236100971f10cb71b96ab6
image_picker_ios: 7fe1ff8e34c1790d6fff70a32484959f563a928a
nanopb: fad817b59e0457d11a5dfbde799381cd727c1275
package_info_plus: af8e2ca6888548050f16fa2f1938db7b5a5df499

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";

View File

@ -4,5 +4,9 @@
<dict>
<key>aps-environment</key>
<string>development</string>
<key>com.apple.developer.applesignin</key>
<array>
<string>Default</string>
</array>
</dict>
</plist>

View File

@ -1,14 +1,13 @@
import 'dart:convert';
import 'package:http/http.dart' as http;
import 'package:pocketbase/pocketbase.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:uae_stat/config/api_config.dart';
class ThemeBaseService {
final pb = PocketBase(apiUrl);
dynamic themeData;
// Future getUserTheme(String userId) async {
// final prefs = await SharedPreferences.getInstance();
// final userId = prefs.getString('userId') ?? '';
@ -40,14 +39,15 @@ class ThemeBaseService {
// }
Future<dynamic> getUserTheme(String userId) async {
print('getUserTheme');
final url = "${pb.baseUrl}/api/collections/users/records/$userId";
final adminAuth = await pb.admins.authWithPassword(
'pb@venbainfotech.com',
'pb@venbainfotech.com',
);
final String adminToken = adminAuth.token;
print('adminToken: $adminToken');
final adminAuth = await pb.admins.authWithPassword(
'pb@venbainfotech.com',
'pb@venbainfotech.com',
);
final String adminToken = adminAuth.token;
print('adminToken: $adminToken');
final response = await http.get(
Uri.parse(url),
headers: {
@ -57,13 +57,22 @@ class ThemeBaseService {
);
if (response.statusCode == 200) {
print("THEME : ${jsonDecode(response.body)['theme']} ");
final prefs = await SharedPreferences.getInstance();
// Store enum as string
await prefs.setString('ThemeType', jsonDecode(response.body)['theme']);
return jsonDecode(response.body)['theme'] ?? 'system';
} else {
print('THEME : system');
return 'system';
}
}
Future<void> updateUserTheme(String userId, String theme) async {
print('updateUserTheme');
// Authenticate admin d
final url = "${pb.baseUrl}/api/collections/users/records/$userId";
final adminAuth = await pb.admins.authWithPassword(
@ -85,7 +94,7 @@ class ThemeBaseService {
);
if (response.statusCode == 200) {
print("Theme updated successfully");
print("Theme updated successfully - ${response.body}");
} else {
print("Failed to update theme: ${response.body}");
throw Exception('Failed to update theme');

View File

@ -1,4 +1,5 @@
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:uae_stat/config/theme/app_theme.dart';
class ThemeSelectorDialog extends StatefulWidget {
@ -11,12 +12,28 @@ class ThemeSelectorDialog extends StatefulWidget {
}
class _ThemeSelectorDialogState extends State<ThemeSelectorDialog> {
late AppTheme _selectedTheme;
AppTheme? _selectedTheme;
@override
void initState() {
super.initState();
_selectedTheme = widget.initialTheme;
print("InitailTheme - ${widget.initialTheme}");
_loadTheme();
// _selectedTheme = widget.initialTheme;
}
Future<void> _loadTheme() async {
final prefs = await SharedPreferences.getInstance();
final storedTheme = prefs.getString('ThemeType') ?? widget.initialTheme;
print("storedTheme - $storedTheme");
setState(() {
_selectedTheme =
storedTheme == 'system' ? AppTheme.system : widget.initialTheme;
});
print("_selectedTheme - $_selectedTheme");
}
@override
@ -26,12 +43,21 @@ class _ThemeSelectorDialogState extends State<ThemeSelectorDialog> {
content: Column(
mainAxisSize: MainAxisSize.min,
children: AppTheme.values.map((theme) {
print("THEME_DIAL1- $theme");
return RadioListTile<AppTheme>(
title: Text(theme.name[0].toUpperCase() + theme.name.substring(1)),
value: theme,
groupValue: _selectedTheme,
onChanged: (value) => setState(() => _selectedTheme = value!),
);
title:
Text(theme.name[0].toUpperCase() + theme.name.substring(1)),
value: theme,
groupValue: _selectedTheme,
onChanged: (value) async {
final prefs = await SharedPreferences.getInstance();
print("THEME_DIALval- $value");
// Store enum as string
await prefs.setString(
'ThemeType', value.toString().split('.').last);
setState(() => _selectedTheme = value!);
});
}).toList(),
),
actions: [

View File

@ -31,7 +31,7 @@ class SessionEntity {
SessionFreshness get freshness {
final now = DateTime.now();
if (now.isAfter(expiresOn)) return SessionFreshness.expired;
if (expiresOn.difference(now) < const Duration(days: 7)) {
if (expiresOn.difference(now) < const Duration(days: 30)) {
return SessionFreshness.stale;
}
return SessionFreshness.fresh;

View File

@ -37,6 +37,11 @@ class TAuthRepo {
() => _state!,
);
Future googleAndAppleAuthencation(token) => Future.delayed(
kThemeAnimationDuration,
() => _sample,
);
Future<void> logout() => Future.delayed(
kThemeAnimationDuration,
() => _state = null,

View File

@ -69,6 +69,21 @@ class AuthUseCase extends _$AuthUseCase {
return session; // Return the session with user details.
}
Future<SessionEntity> googleAndAppleAuthencation(token) async {
// print("loginTEST2");
final session = await _repo.googleAndAppleAuthencation(token);
// print("loginTEST4");
final localPrefs = await getIt.call<TLocalPreferencesRepo>().get();
if (localPrefs != null) {
await getIt.call<TUserRepo>().syncPreferences(
localPrefs,
id: session.id,
);
}
state = AsyncData(session);
return session; // Return the session with user details.
}
Future<void> logout() async {
await _repo.logout();
state = const AsyncData(null);

View File

@ -53,6 +53,7 @@ class PAuthRepo implements TAuthRepo {
email,
pw,
);
print('googleAuth $user');
} on ClientException catch (err) {
final message = err.response['message'];
final isWrongEmailPw = message == 'Failed to authenticate.';
@ -66,6 +67,30 @@ class PAuthRepo implements TAuthRepo {
return se;
}
Future<SessionEntity> googleAndAppleAuthencation(token) async {
print("GloginTEST3");
late final RecordAuth user;
try {
// user = await PocketBaseService.users.authWithPassword(
// email,
// pw,
// );
user = token;
} on ClientException catch (err) {
final message = err.response['message'];
final isWrongEmailPw = message == 'Failed to authenticate.';
if (isWrongEmailPw) throw LoginError.invalidEmailPw;
rethrow;
}
final isVerified = user.record!.getBoolValue('verified');
if (!isVerified) throw LoginError.emailAddressNotVerified;
final se = _sessionEntityFromPocketbaseRecord(user);
await _LocalAuthRepo.storeLocally(se);
return se;
}
@override
Future<void> logout() {
PocketBaseService.authStore.clear();

View File

@ -17,7 +17,7 @@ import 'package:uae_stat/presentation/components/indicators/locale_provider.dart
import 'package:uae_stat/presentation/components/my_toggle.dart';
import 'package:uae_stat/presentation/components/space.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
// import 'package:uae_stat/l10n/app_localizations.dart';
import 'package:uae_stat/config/my_theme.dart';
class CreateNewPw extends ConsumerStatefulWidget {
@ -27,9 +27,9 @@ class CreateNewPw extends ConsumerStatefulWidget {
const CreateNewPw(
{Key? key,
required this.userId,
required this.email,
required this.keyParam});
required this.userId,
required this.email,
required this.keyParam});
@override
ConsumerState<CreateNewPw> createState() => _CreateNewPwState();
@ -126,7 +126,7 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
try {
// Attempt to authenticate the user with email and password
final authResponse =
await _pb.collection('users').authWithPassword(email, password);
await _pb.collection('users').authWithPassword(email, password);
if (authResponse != null) {
print('Password match successful for email: $email');
@ -156,20 +156,20 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
};
bool isPasswordValid =
await verifyUserPassword(widget.email, oldPassword);
await verifyUserPassword(widget.email, oldPassword);
print(isPasswordValid);
if (isPasswordValid) {
// Update password
await _pb.collection('users').update(
userId,
body: {
'password': newPassword,
'passwordConfirm': newPassword,
},
headers: headers,
);
userId,
body: {
'password': newPassword,
'passwordConfirm': newPassword,
},
headers: headers,
);
setState(() {
isLoading = false;
@ -179,13 +179,13 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(
AppLocalizations.of(context)!.password_update_successfully,
AppLocalizations.of(context)!.password_update_successfully,
style: TextStyle(
fontFamily: context.translate(
'Roboto',
'NotoKufi',
)
),),
)),
),
),
);
@ -203,14 +203,14 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
});
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content:
Text(AppLocalizations.of(context)!.your_old_password_incorrect,
style: TextStyle(
fontFamily: context.translate(
'Roboto',
'NotoKufi',
)
),),
content: Text(
AppLocalizations.of(context)!.your_old_password_incorrect,
style: TextStyle(
fontFamily: context.translate(
'Roboto',
'NotoKufi',
)),
),
backgroundColor: Colors.red,
),
);
@ -222,13 +222,14 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
});
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text(context.translate('Failed to update password: $e','فشل في تحديث كلمة المرور'),
content: Text(
context.translate(
'Failed to update password: $e', 'فشل في تحديث كلمة المرور'),
style: TextStyle(
fontFamily: context.translate(
'Roboto',
'NotoKufi',
)
),
)),
),
backgroundColor: Colors.red,
),
@ -256,53 +257,51 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
});
// final themeMode = ref.read(themeProvider);
final themeMode = ThemeMode.dark;
final isDarkTheme = themeMode == ThemeMode.dark ||
(themeMode == ThemeMode.system &&
// final themeMode = ThemeMode.dark;
final isDarkTheme = ref.read(themeProvider) == ThemeMode.dark ||
(ref.read(themeProvider) == ThemeMode.system &&
MediaQuery.of(context).platformBrightness == Brightness.dark);
return PopScope(
canPop: false, // Allow back navigation only if not login screen
onPopInvokedWithResult: (didPop, result) {
if (didPop) return;
logout(context);// Show exit confirmation dialog
},
child: Scaffold(
backgroundColor: isDarkTheme ? Color(0xFF111111) : Colors.white,
body: Stack(children: [
SingleChildScrollView(
child: SafeArea(
child: _isPasswordUpdated
? _buildSuccessContent(screenHeight, screenWidth)
: _buildPasswordForm(ref, screenHeight, screenWidth),
),
),
if (isLoading)
Container(
color: Color(0x98FFFCE5), // Semi-transparent background
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Container(
margin: EdgeInsets.symmetric(
horizontal: 40), // Left & Right space
child: LinearProgressIndicator(
minHeight: 5, // Adjust thickness
backgroundColor:
Colors.grey[100], // Optional: Background color
valueColor: AlwaysStoppedAnimation<Color>(
Color(0xFFAA8E83)), // Loader color
),
),
],
canPop: false, // Allow back navigation only if not login screen
onPopInvokedWithResult: (didPop, result) {
if (didPop) return;
logout(context); // Show exit confirmation dialog
},
child: Scaffold(
backgroundColor: isDarkTheme ? Color(0xFF111111) : Colors.white,
body: Stack(children: [
SingleChildScrollView(
child: SafeArea(
child: _isPasswordUpdated
? _buildSuccessContent(
screenHeight, screenWidth, isDarkTheme)
: _buildPasswordForm(ref, screenHeight, screenWidth),
),
)
]))
);
),
if (isLoading)
Container(
color: Color(0x98FFFCE5), // Semi-transparent background
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Container(
margin: EdgeInsets.symmetric(
horizontal: 40), // Left & Right space
child: LinearProgressIndicator(
minHeight: 5, // Adjust thickness
backgroundColor:
Colors.grey[100], // Optional: Background color
valueColor: AlwaysStoppedAnimation<Color>(
Color(0xFFAA8E83)), // Loader color
),
),
],
),
)
])));
}
Widget _buildPasswordForm(
WidgetRef ref, double screenHeight, double screenWidth) {
final passwordLocale = ref.watch(localeProvider);
@ -310,6 +309,7 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
final isDarkTheme = themeMode == ThemeMode.dark ||
(themeMode == ThemeMode.system &&
MediaQuery.of(context).platformBrightness == Brightness.dark);
return Form(
key: _formKey,
child: Padding(
@ -334,7 +334,9 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
// Icons.close,
Icons.arrow_back_ios,
size: 24, // Icon size
color: isDarkTheme ? Colors.white : Colors.black, // Icon color
color: isDarkTheme
? Colors.white
: Colors.black, // Icon color
),
),
), // Left icon
@ -375,7 +377,7 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
),
fontSize: passwordLocale?.languageCode == 'ar' ? 24 : 26,
fontWeight: FontWeight.w300,
color: isDarkTheme ? Colors.white : null,
color: isDarkTheme ? Colors.white : Colors.black,
),
),
SizedBox(height: 10),
@ -394,7 +396,7 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
'NotoKufi',
),
fontSize:
passwordLocale?.languageCode == 'ar' ? 14 : 15,
passwordLocale?.languageCode == 'ar' ? 14 : 15,
fontWeight: FontWeight.w700,
color: Color(0xFF898C81)),
),
@ -407,7 +409,7 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
'NotoKufi',
),
fontSize:
passwordLocale?.languageCode == 'ar' ? 14 : 15,
passwordLocale?.languageCode == 'ar' ? 14 : 15,
color: Color(0xFF898C81),
fontWeight: FontWeight.w700),
),
@ -423,12 +425,13 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
hintText: AppLocalizations.of(context)!.old_password,
// prefixIcon: Icon(Icons.lock, color: Colors.blue),
hintStyle: TextStyle(
color: isDarkTheme ? Colors.white : Color(0xFFC3C6CB),
fontWeight: FontWeight.w400,
color: isDarkTheme ? Colors.white : Color(0xFFC3C6CB),
fontWeight: FontWeight.w400,
fontFamily: context.translate(
'Roboto',
'NotoKufi',
),),
),
),
prefixIconConstraints: const BoxConstraints(
maxWidth: 25 + 16 + 10,
maxHeight: 25 + (8 * 2),
@ -439,11 +442,16 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
end: 10,
),
child: Image.asset(
isDarkTheme ? MiscIconAssetPath.lockDark : MiscIconAssetPath.lockLight,
isDarkTheme
? MiscIconAssetPath.lockDark
: MiscIconAssetPath.lockLight,
fit: BoxFit.fitHeight,
height: 25,
width: 25,
color: isDarkTheme ? Colors.white : MyTheme.topicColor(IndicatorTopic.economy).shade300,
color: Color(0xFFB68A34),
// color: isDarkTheme
// ? Colors.white
// : MyTheme.topicColor(IndicatorTopic.economy).shade300,
),
),
suffixIcon: IconButton(
@ -460,7 +468,7 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
: MiscIconAssetPath.visibleOn,
color: Color(
0xFF9EA2A9,
0xFFB68A34,
), // Apply color if needed, but keep in mind `Image.asset` might not support color directly.
width: 24,
height: 24,
@ -475,8 +483,9 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(10),
borderSide: BorderSide(
color:
MyTheme.topicColor(IndicatorTopic.economy).shade400,
color: Color(0xFFB68A34),
// color:
// MyTheme.topicColor(IndicatorTopic.economy).shade400,
width: 1),
),
focusedBorder: OutlineInputBorder(
@ -507,12 +516,13 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
hintText: AppLocalizations.of(context)!.enter_new_password,
// prefixIcon: Icon(Icons.lock, color: Colors.blue),
hintStyle: TextStyle(
color: Color(0xFFC3C6CB),
fontWeight: FontWeight.w400,
color: Color(0xFFC3C6CB),
fontWeight: FontWeight.w400,
fontFamily: context.translate(
'Roboto',
'NotoKufi',
),),
),
),
prefixIconConstraints: const BoxConstraints(
maxWidth: 25 + 16 + 10,
maxHeight: 25 + (8 * 2),
@ -527,7 +537,8 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
fit: BoxFit.fitHeight,
height: 25,
width: 25,
color: MyTheme.topicColor(IndicatorTopic.economy).shade300,
color: Color(0xFFB68A34),
// color: MyTheme.topicColor(IndicatorTopic.economy).shade300,
),
),
@ -543,9 +554,9 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
_obscureNewPassword
? MiscIconAssetPath.visibilityOff
: MiscIconAssetPath.visibleOn,
color: Color(
0xFF9EA2A9), // Apply color if needed, but keep in mind `Image.asset` might not support color directly.
color: Color(0xFFB68A34),
// color: Color(
// 0xFF9EA2A9), // Apply color if needed, but keep in mind `Image.asset` might not support color directly.
width: 24,
height: 24,
),
@ -559,8 +570,9 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(10),
borderSide: BorderSide(
color:
MyTheme.topicColor(IndicatorTopic.economy).shade400,
color: Color(0xFFB68A34),
// color:
// MyTheme.topicColor(IndicatorTopic.economy).shade400,
width: 1),
),
focusedBorder: OutlineInputBorder(
@ -589,12 +601,13 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
// hintText: 'Confirm new password',
hintText: AppLocalizations.of(context)!.confirm_new_password,
hintStyle: TextStyle(
color: Color(0xFFC3C6CB),
fontWeight: FontWeight.w400,
color: Color(0xFFC3C6CB),
fontWeight: FontWeight.w400,
fontFamily: context.translate(
'Roboto',
'NotoKufi',
),),
),
),
prefixIconConstraints: const BoxConstraints(
maxWidth: 25 + 16 + 10,
maxHeight: 25 + (8 * 2),
@ -609,7 +622,8 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
fit: BoxFit.fitHeight,
height: 25,
width: 25,
color: MyTheme.topicColor(IndicatorTopic.economy).shade300,
color: Color(0xFFB68A34),
// color: MyTheme.topicColor(IndicatorTopic.economy).shade300,
),
),
@ -625,9 +639,9 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
_obscureConfirmPassword
? MiscIconAssetPath.visibilityOff
: MiscIconAssetPath.visibleOn,
color: Color(
0xFF9EA2A9), // Apply color if needed, but keep in mind `Image.asset` might not support color directly.
color: Color(0xFFB68A34),
// color: Color(
// 0xFF9EA2A9), // Apply color if needed, but keep in mind `Image.asset` might not support color directly.
width: 24,
height: 24,
),
@ -641,8 +655,9 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(10),
borderSide: BorderSide(
color:
MyTheme.topicColor(IndicatorTopic.economy).shade400,
color: Color(0xFFB68A34),
// color:
// MyTheme.topicColor(IndicatorTopic.economy).shade400,
width: 1),
),
focusedBorder: OutlineInputBorder(
@ -681,7 +696,8 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
}
},
style: ElevatedButton.styleFrom(
backgroundColor: Colors.brown[300],
backgroundColor: Color(0xFFB68A34),
// backgroundColor: Colors.brown[300],
padding: EdgeInsets.symmetric(horizontal: 80, vertical: 16),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10),
@ -698,7 +714,7 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
'NotoKufi',
),
fontSize:
passwordLocale?.languageCode == 'ar' ? 14 : 18,
passwordLocale?.languageCode == 'ar' ? 14 : 18,
color: Colors.white),
),
SizedBox(width: 2),
@ -731,7 +747,8 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
);
}
Widget _buildSuccessContent(double screenHeight, double screenWidth) {
Widget _buildSuccessContent(
double screenHeight, double screenWidth, bool isDarkTheme) {
print('IN');
return Padding(
padding: EdgeInsets.all(20.0),
@ -753,7 +770,7 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
),
fontSize: 16,
fontWeight: FontWeight.w500,
color: Color(0xFF414042),
color: isDarkTheme ? Colors.white : Color(0xFF414042),
),
),
SizedBox(height: 20),
@ -779,7 +796,8 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
),
),
backgroundColor: WidgetStatePropertyAll(
MyTheme.topicColor(IndicatorTopic.social),
Color(0xFFB68A34),
// MyTheme.topicColor(IndicatorTopic.social),
),
// surfaceTintColor: MaterialStatePropertyAll(
// MyTheme.economy[800],
@ -810,7 +828,7 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
],
),
),
SizedBox(height: screenHeight*0.25),
SizedBox(height: screenHeight * 0.25),
// Spacer(),
Center(
// child: Container(
@ -829,4 +847,4 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
),
);
}
}
}

View File

@ -14,6 +14,7 @@ import 'package:uae_stat/infrastructure/services/img_asset_paths/banner_asset_pa
import 'package:uae_stat/infrastructure/services/img_asset_paths/icons/misc_icon_asset_path.dart';
import 'package:uae_stat/presentation/Screens/profilepage.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
// import 'package:uae_stat/l10n/app_localizations.dart';
import 'package:uae_stat/presentation/components/indicators/locale_provider.dart';
import 'package:uae_stat/presentation/components/my_toggle.dart';
@ -293,8 +294,7 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
fontFamily: context.translate(
'Roboto',
'NotoKufi',
)
),
)),
),
content: Text(
context.translate(
@ -304,8 +304,7 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
fontFamily: context.translate(
'Roboto',
'NotoKufi',
)
),
)),
),
actions: [
TextButton(
@ -313,24 +312,28 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
Navigator.pop(context);
setState(() {
isRegistering =
false; // Re-enable the button after error
false; // Re-enable the button after error
});
},
style: TextButton.styleFrom(
backgroundColor:
Color(0xFFAA8E83), // Set background color
Color(0xFFAA8E83), // Set background color
foregroundColor: Colors.white,
shape: RoundedRectangleBorder(
borderRadius:
BorderRadius.circular(10.0), // Set text color
BorderRadius.circular(10.0), // Set text color
),
),
child: Text(
context.translate('Ok', 'حسنًا'),
style: TextStyle(color: Colors.white, fontSize: 16, fontFamily: context.translate(
'Roboto',
'NotoKufi',
),),
style: TextStyle(
color: Colors.white,
fontSize: 16,
fontFamily: context.translate(
'Roboto',
'NotoKufi',
),
),
),
),
],
@ -360,8 +363,6 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
}
}
@override
Widget build(BuildContext context) {
double screenheight = MediaQuery.of(context).size.height;
@ -415,7 +416,7 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
if (didPop) return;
context.go('/login'); // Show exit confirmation dialog
},
child:Scaffold(
child: Scaffold(
backgroundColor: isDarkTheme ? Color(0xFF111111) : Colors.white,
body: SafeArea(
child: Stack(children: [
@ -456,13 +457,20 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
Column(children: [
registrationSuccess
? Padding(
padding: const EdgeInsets.all(20.0),
padding: const EdgeInsets.only(
top: 20.0,
left: 20.0,
right: 20.0,
bottom: 10.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
SizedBox(height: screenheight / 4),
buildIconContainer(
Icons.check_circle_rounded, Color(0xFF7DAFBC)),
buildIconContainer(Icons.check_circle_rounded,
Color(0xFFB68A34)
// Color(0xFF7DAFBC)
),
SizedBox(height: 20),
Text(
context.translate(
@ -476,8 +484,9 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
),
fontSize: 16,
fontWeight: FontWeight.w500,
color: isDarkTheme ? Color(0xFFFFFFFF) : Color(0xFF414042)
),
color: isDarkTheme
? Color(0xFFFFFFFF)
: Color(0xFF414042)),
),
SizedBox(height: 10),
Text(
@ -491,14 +500,21 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
'NotoKufi',
),
fontSize: 14,
color: isDarkTheme ? Color(0xFFFFFFFF) : Color(0xFF898C81),
color: isDarkTheme
? Color(0xFFFFFFFF)
: Color(0xFF898C81),
),
),
SizedBox(height: 10),
ElevatedButton(
onPressed: () => {context.go('/login')},
style: ElevatedButton.styleFrom(
backgroundColor: isDarkTheme ? Color(0xFF24B4FB) : Color(0xFFAA8E83), // Background color
backgroundColor: Color(0xFFB68A34),
// isDarkTheme
// ? Color(0xFF24B4FB)
// : Color(
// 0xFFAA8E83), // Background color
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(
12), // Border radius
@ -520,14 +536,14 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
Center(
child: Container(
height: screenheight / 16,
width: screenwidth / 2.5,
// width: screenwidth / 2.5,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage(
isDarkTheme
? BannerAssetPath.fcscLogoDark
: BannerAssetPath.fcscLogoLight), // Background image asset
fit: BoxFit.fill,
image: AssetImage(isDarkTheme
? BannerAssetPath.fcscLogoDark
: BannerAssetPath
.fcscLogoLight), // Background image asset
// fit: BoxFit.fill,
),
),
))
@ -556,7 +572,9 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
),
fontSize: 16,
fontWeight: FontWeight.w500,
color: isDarkTheme ? Color(0xFFFFFFFF) : Color(0xFF414042)),
color: isDarkTheme
? Color(0xFFFFFFFF)
: Color(0xFF414042)),
),
SizedBox(height: 10),
Text(
@ -570,7 +588,9 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
'NotoKufi',
),
fontSize: 14,
color: isDarkTheme ? Color(0xFFEEEEEE) : Color(0xFF898C81),
color: isDarkTheme
? Color(0xFFEEEEEE)
: Color(0xFF898C81),
),
),
SizedBox(height: 10),
@ -590,11 +610,15 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
context.translate(
'Retry', 'أعد المحاولة'),
style: TextStyle(
fontFamily: context.translate(
'Roboto',
'NotoKufi',
),
color: isDarkTheme ? Color(0xFF24B4FB) : Color(0xFFAA8E83),
fontFamily: context.translate(
'Roboto',
'NotoKufi',
),
color: Color(0xFFB68A34),
// color: isDarkTheme
// ? Color(0xFF24B4FB)
// : Color(0xFFAA8E83),
),
),
),
@ -602,14 +626,14 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
Center(
child: Container(
height: screenheight / 16,
width: screenwidth / 2.5,
// width: screenwidth / 2.5,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage(
isDarkTheme
? BannerAssetPath.fcscLogoDark
: BannerAssetPath.fcscLogoLight), // Background image asset
fit: BoxFit.fill,
image: AssetImage(isDarkTheme
? BannerAssetPath.fcscLogoDark
: BannerAssetPath
.fcscLogoLight), // Background image asset
// fit: BoxFit.fill,
),
),
))
@ -620,8 +644,8 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
key: _formKey,
child: SingleChildScrollView(
child: Column(
mainAxisAlignment:
MainAxisAlignment.center,
// mainAxisAlignment:
// MainAxisAlignment.center,
children: [
SizedBox(height: screenheight / 60),
Text(
@ -629,13 +653,15 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
AppLocalizations.of(context)!
.register_title,
style: TextStyle(
fontFamily: context.translate(
'Roboto',
'NotoKufi',
),
fontSize: 32,
fontWeight: FontWeight.w400,
color: isDarkTheme ? Color(0xFFFFFFFF) : Color(0xFF000000),
fontFamily: context.translate(
'Roboto',
'NotoKufi',
),
fontSize: 32,
fontWeight: FontWeight.w400,
color: isDarkTheme
? Color(0xFFFFFFFF)
: Color(0xFF000000),
),
),
SizedBox(height: 10),
@ -649,12 +675,14 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
),
fontSize:
context.translate(18.0, 14.0),
color: isDarkTheme ? Color(0xFFFFFFFF) : Color(0xFF898C81),
color: isDarkTheme
? Color(0xFFFFFFFF)
: Color(0xFF898C81),
fontWeight: FontWeight.w600,
),
),
SizedBox(height: 20),
SizedBox(height: 15),
// Display this if registration is pending approval
Padding(
padding: const EdgeInsets.only(
@ -667,9 +695,13 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
// focusNode: _focusNodes[0],
decoration: InputDecoration(
filled: true,
fillColor: isDarkTheme ? const Color(0xFF000000) : Colors.white,
fillColor: isDarkTheme
? const Color(0xFF000000)
: Colors.white,
errorStyle: TextStyle(
color: isDarkTheme ? Color(0xFFFFA200) : Color(0xFFb22222),
color: isDarkTheme
? Color(0xFFFFA200)
: Color(0xFFb22222),
fontFamily: context.translate(
'Roboto',
'NotoKufi',
@ -711,7 +743,8 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
borderRadius:
BorderRadius.circular(10),
borderSide: BorderSide(
color: Color(0xFFB68A34), // border
color: Color(
0xFFB68A34), // border
width: 1), // Enabled border
),
focusedBorder: OutlineInputBorder(
@ -743,7 +776,7 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
'Roboto',
'NotoKufi',
),
color: const Color(0xFFC3C6CB),
color: const Color(0xFFC3C6CB),
fontSize: registerLocale
?.languageCode ==
'ar'
@ -770,9 +803,13 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
// focusNode: _focusNodes[1],
decoration: InputDecoration(
filled: true,
fillColor: isDarkTheme ? const Color(0xFF000000) : Colors.white,
fillColor: isDarkTheme
? const Color(0xFF000000)
: Colors.white,
errorStyle: TextStyle(
color: isDarkTheme ? Color(0xFFFFA200) : Color(0xFFb22222),
color: isDarkTheme
? Color(0xFFFFA200)
: Color(0xFFb22222),
fontFamily: context.translate(
'Roboto',
'NotoKufi',
@ -842,7 +879,7 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
'Roboto',
'NotoKufi',
),
color: const Color(0xFFC3C6CB),
color: const Color(0xFFC3C6CB),
fontSize: registerLocale
?.languageCode ==
'ar'
@ -873,9 +910,13 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
obscureText: _obscurePassword,
decoration: InputDecoration(
filled: true,
fillColor: isDarkTheme ? const Color(0xFF000000) : Colors.white,
fillColor: isDarkTheme
? const Color(0xFF000000)
: Colors.white,
errorStyle: TextStyle(
color: isDarkTheme ? Color(0xFFFFA200) : Color(0xFFb22222),
color: isDarkTheme
? Color(0xFFFFA200)
: Color(0xFFb22222),
fontFamily: context.translate(
'Roboto',
'NotoKufi',
@ -977,7 +1018,7 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
'Roboto',
'NotoKufi',
),
color: const Color(0xFFC3C6CB),
color: const Color(0xFFC3C6CB),
fontSize: registerLocale
?.languageCode ==
'ar'
@ -991,7 +1032,7 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
MaxLengthEnforcement.enforced,
),
),
SizedBox(height: 15),
SizedBox(height: 10),
Padding(
padding: const EdgeInsets.only(
top: 5.0,
@ -1006,9 +1047,13 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
_obscureConfirmPassword,
decoration: InputDecoration(
filled: true,
fillColor: isDarkTheme ? const Color(0xFF000000) : Colors.white,
fillColor: isDarkTheme
? const Color(0xFF000000)
: Colors.white,
errorStyle: TextStyle(
color: isDarkTheme ? Color(0xFFFFA200) : Color(0xFFb22222),
color: isDarkTheme
? Color(0xFFFFA200)
: Color(0xFFb22222),
fontFamily: context.translate(
'Roboto',
'NotoKufi',
@ -1099,7 +1144,7 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
'Roboto',
'NotoKufi',
),
color: const Color(0xFFC3C6CB),
color: const Color(0xFFC3C6CB),
fontSize: registerLocale
?.languageCode ==
'ar'
@ -1140,8 +1185,8 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
},
side: BorderSide(
color: showError
? Color(0xFFD83731)
: Color(0xFFB68A34),
? Color(0xFFD83731)
: Color(0xFFB68A34),
width: 1,
),
),
@ -1159,7 +1204,8 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
.agree,
// text: 'I agree to ',
style: TextStyle(
fontFamily: context.translate(
fontFamily:
context.translate(
'Roboto',
'NotoKufi',
),
@ -1170,7 +1216,10 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
'ar'
? 12
: 14,
color: isDarkTheme ? Color(0xFFFFFFFF) : Color(0xFF898C81), // Change to your desired color
color: isDarkTheme
? Color(0xFFFFFFFF)
: Color(
0xFF898C81), // Change to your desired color
),
children: [
TextSpan(
@ -1184,7 +1233,8 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
.terms_conditions,
// text: 'Terms & Conditions',
style: TextStyle(
fontFamily: context.translate(
fontFamily: context
.translate(
'Roboto',
'NotoKufi',
),
@ -1197,7 +1247,11 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
fontWeight:
FontWeight
.bold,
color:isDarkTheme ? Color(0xFFB68A35) : Color(0xFF985400),
color: isDarkTheme
? Color(
0xFFB68A35)
: Color(
0xFF985400),
// Makes the text bold
// decoration:
// TextDecoration.underline,
@ -1212,11 +1266,16 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
.of(context)!
.t_and,
style: TextStyle(
fontFamily: context.translate(
fontFamily: context
.translate(
'Roboto',
'NotoKufi',
),
color: isDarkTheme ? Color(0xFFFFFFFF) : Color(0xFF898C81),
color: isDarkTheme
? Color(
0xFFFFFFFF)
: Color(
0xFF898C81),
),
),
TextSpan(
@ -1229,7 +1288,8 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
.of(context)!
.privacy_policy,
style: TextStyle(
fontFamily: context.translate(
fontFamily: context
.translate(
'Roboto',
'NotoKufi',
),
@ -1242,7 +1302,11 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
'ar'
? 12
: 14,
color: isDarkTheme ? Color(0xFFB68A35) : Color(0xFF985400),
color: isDarkTheme
? Color(
0xFFB68A35)
: Color(
0xFF985400),
// decoration:
// TextDecoration.underline,
decorationColor:
@ -1256,7 +1320,8 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
.of(context)!
.conditions,
style: TextStyle(
fontFamily: context.translate(
fontFamily: context
.translate(
'Roboto',
'NotoKufi',
),
@ -1267,7 +1332,11 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
'ar'
? 12
: 14,
color: isDarkTheme ? Color(0xFFFFFFFF) : Color( 0xFF898C81), // Change to your desired color
color: isDarkTheme
? Color(
0xFFFFFFFF)
: Color(
0xFF898C81), // Change to your desired color
),
),
],
@ -1300,7 +1369,8 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
context.translate(
'Required', 'مطلوب'),
style: TextStyle(
fontFamily: context.translate(
fontFamily:
context.translate(
'Roboto',
'NotoKufi',
),
@ -1329,7 +1399,8 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
? null
: _registerUser,
style: ElevatedButton.styleFrom(
backgroundColor: Color(0xFFB68A34), // Brownish color for Register
backgroundColor: Color(
0xFFB68A34), // Brownish color for Register
shape: RoundedRectangleBorder(
borderRadius:
BorderRadius.circular(10),
@ -1344,76 +1415,8 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
context)!
.register_title,
style: TextStyle(
fontFamily: context.translate(
'Roboto',
'NotoKufi',
),
fontSize: registerLocale
?.languageCode ==
'ar'
? 14
: 16,
color: Colors.white
),
),
SizedBox(width: 8),
Icon(
Icons
.chevron_right_outlined,
color: Colors.white, // Set your desired color here
)
],
),
),
),
),
SizedBox(height: 15),
Text(
AppLocalizations.of(context)!
.account_confirmation,
style: TextStyle(
fontFamily: context.translate(
'Roboto',
'NotoKufi',
),
fontWeight: FontWeight.w500,
fontSize:
registerLocale?.languageCode ==
'ar'
? 12
: 14,
color: isDarkTheme ? Color(0xFFFFFFFF) : Color(0xFF898C81),
),
),
SizedBox(height: 15),
Padding(
padding: const EdgeInsets.only(
top: 5.0,
bottom: 10,
left: 30,
right: 30),
child: SizedBox(
width: screenwidth / 1,
child: ElevatedButton(
onPressed: () {
context.pop();
},
style: ElevatedButton.styleFrom(
backgroundColor: Color(0xFFB68A34), // Blueish color for Login
shape: RoundedRectangleBorder(
borderRadius:
BorderRadius.circular(10),
),
),
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
Text(
AppLocalizations.of(
context)!
.login_title,
style: TextStyle(
fontFamily: context.translate(
fontFamily:
context.translate(
'Roboto',
'NotoKufi',
),
@ -1428,17 +1431,94 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
Icon(
Icons
.chevron_right_outlined,
color: Colors.white, // Set your desired color here
color: Colors
.white, // Set your desired color here
)
],
),
),
),
),
SizedBox(height: 5),
Text(
AppLocalizations.of(context)!
.account_confirmation,
style: TextStyle(
fontFamily: context.translate(
'Roboto',
'NotoKufi',
),
fontWeight: FontWeight.w500,
fontSize:
registerLocale?.languageCode ==
'ar'
? 12
: 14,
color: isDarkTheme
? Color(0xFFFFFFFF)
: Color(0xFF898C81),
),
),
SizedBox(height: 5),
Padding(
padding: const EdgeInsets.only(
top: 5.0,
bottom: 10,
left: 30,
right: 30),
child: SizedBox(
width: screenwidth / 1,
child: ElevatedButton(
onPressed: () {
context.pop();
},
style: ElevatedButton.styleFrom(
backgroundColor: Color(
0xFFB68A34), // Blueish color for Login
shape: RoundedRectangleBorder(
borderRadius:
BorderRadius.circular(10),
),
),
child: Row(
mainAxisSize: MainAxisSize.min,
children: [
Text(
AppLocalizations.of(
context)!
.login_title,
style: TextStyle(
fontFamily:
context.translate(
'Roboto',
'NotoKufi',
),
fontSize: registerLocale
?.languageCode ==
'ar'
? 14
: 16,
color: Colors.white),
),
SizedBox(width: 8),
Icon(
Icons
.chevron_right_outlined,
color: Colors
.white, // Set your desired color here
)
],
),
),
),
),
// Spacer(),
SizedBox(
height: 10,
),
Center(
Padding(
padding: const EdgeInsets.all(20.0),
// child: Container(
// height: screenheight / 16,
// width: screenwidth / 3,
@ -1452,9 +1532,9 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
// )
child: fcscBanner,
),
SizedBox(
height: 20,
),
// SizedBox(
// height: 5,
// ),
],
),
),
@ -1491,4 +1571,4 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
)),
);
}
}
}

View File

@ -5,6 +5,7 @@ import 'package:external_repos/external_repos.dart';
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart';
import 'package:http/http.dart' as http;
@ -23,7 +24,7 @@ import 'package:uae_stat/presentation/components/indicators/locale_provider.dart
import 'package:uae_stat/presentation/components/my_toggle.dart';
import 'package:uae_stat/presentation/routes/bottom_bar_routes/tab_routes/home_route.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
// import 'package:uae_stat/l10n/app_localizations.dart';
import '../components/my_bottom_nav_bar.dart';
import 'auth_verification/changepassword.dart';
import 'demo_home.dart';
@ -71,14 +72,17 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
// Date format for the display
final DateFormat _dateFormat = DateFormat('yyyy-MM-dd');
final List<String> _countries = [
'United Arab Emirates',
'United States',
'India',
'Canada'
];
// final List<String> _countries = [
// 'United Arab Emirates',
// 'United States',
// 'India',
// 'Canada'
// ];
final List<String> preferred_language = ['English', 'Arabic'];
String? _selectedCountry;
// String? _selectedCountry;
ISOCountry? _selectedCountry;
String? preferredLang;
String? _selectedLanguage;
bool isChecked = false;
bool showError = false;
@ -98,6 +102,8 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
super.initState();
// print(widget.userId);
_selectedCountry ??= ISOCountry.numeric784;
final themeMode = ref.read(themeProvider);
isDarkTheme = themeMode == ThemeMode.dark ||
(themeMode == ThemeMode.system &&
@ -198,10 +204,10 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
_isLoading = true; // Start loading
});
final XFile? pickedFile =
await _picker.pickImage(source: ImageSource.gallery);
await _picker.pickImage(source: ImageSource.gallery);
if (pickedFile != null) {
final String fileExtension =
pickedFile.path.split('.').last.toLowerCase();
pickedFile.path.split('.').last.toLowerCase();
if (fileExtension == 'jpg' ||
fileExtension == 'jpeg' ||
fileExtension == 'png' ||
@ -212,13 +218,15 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
});
} else {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Please select a JPG, JPEG, or PNG file.',
style: TextStyle(
fontFamily: context.translate(
'Roboto',
'NotoKufi',
)
),)),
SnackBar(
content: Text(
'Please select a JPG, JPEG, or PNG file.',
style: TextStyle(
fontFamily: context.translate(
'Roboto',
'NotoKufi',
)),
)),
);
}
}
@ -245,7 +253,7 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
return Theme(
data: Theme.of(context).copyWith(
dialogBackgroundColor:
Colors.white, // Background color of the date picker
Colors.white, // Background color of the date picker
textButtonTheme: TextButtonThemeData(
style: ButtonStyle(
shape: WidgetStateProperty.all(RoundedRectangleBorder(
@ -336,8 +344,13 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
// String username = 'users55538';
// String email = 'surendarsuri30@gmail.com';
String dateOfBirth = _dateController.text; // in DD/MM/YYYY format
String countryRegion = _selectedCountry ?? '';
String preferredLang = _selectedLanguage == 'English' ? 'en' : 'ar';
// String countryRegion = _selectedCountry ?? '';
String countryRegion = context.translate(
_selectedCountry?.nameEN ?? '',
_selectedCountry?.nameAR ?? '',
);
preferredLang = _selectedLanguage == 'English' ? 'en' : 'ar';
bool termsAccepted = isChecked;
// Parse the date from dd/MM/yyyy format and convert to yyyy-MM-dd
@ -347,14 +360,14 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
// Create a multipart request
final uri =
Uri.parse('${_pb.baseUrl}/api/collections/users/records/$userID');
Uri.parse('${_pb.baseUrl}/api/collections/users/records/$userID');
final request = http.MultipartRequest('PATCH', uri);
// Add other fields
request.fields['full_name'] = fullName;
request.fields['dob'] = formattedDob;
request.fields['country_region'] = countryRegion;
request.fields['language'] = preferredLang;
request.fields['language'] = preferredLang!;
request.fields['is_profile_completed'] = 'True';
// Add the file, if available
@ -371,14 +384,15 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
// Send the request
final response = await request.send();
print(response);
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text(AppLocalizations.of(context)!.profile_updated_successfully,
style: TextStyle(
fontFamily: context.translate(
'Roboto',
'NotoKufi',
)
),)));
ScaffoldMessenger.of(context).showSnackBar(SnackBar(
content: Text(
AppLocalizations.of(context)!.profile_updated_successfully,
style: TextStyle(
fontFamily: context.translate(
'Roboto',
'NotoKufi',
)),
)));
// **Set Default Locale in Provider**
print('_selectedLanguage $_selectedLanguage');
preferredLang = _selectedLanguage == 'English' ? 'en' : 'ar';
@ -397,12 +411,17 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
context.go('/welcomePage');
} catch (error) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text(context.translate("Failed to update profile: $error",'$error فشل في تحديث الملف الشخصي: '),style: TextStyle(
fontFamily: context.translate(
'Roboto',
'NotoKufi',
)
),)),);
SnackBar(
content: Text(
context.translate("Failed to update profile: $error",
'$error فشل في تحديث الملف الشخصي: '),
style: TextStyle(
fontFamily: context.translate(
'Roboto',
'NotoKufi',
)),
)),
);
}
}
}
@ -444,21 +463,27 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
'Logout',
'تسجيل الخروج',
),
style:
TextStyle(color: Color(0xFF898C81), fontWeight: FontWeight.w700,fontFamily: context.translate(
'Roboto',
'NotoKufi',
),),
style: TextStyle(
color: Color(0xFF898C81),
fontWeight: FontWeight.w700,
fontFamily: context.translate(
'Roboto',
'NotoKufi',
),
),
),
content: Text(
context.translate(
'Are you sure you want to logout?',
'هل أنت متأكد أنك تريد تسجيل الخروج؟',
),
style: TextStyle(color: Color(0xFF898C81),fontFamily: context.translate(
'Roboto',
'NotoKufi',
),),
style: TextStyle(
color: Color(0xFF898C81),
fontFamily: context.translate(
'Roboto',
'NotoKufi',
),
),
),
actions: [
TextButton(
@ -477,10 +502,11 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
'إلغاء',
),
style: TextStyle(
color: Color(0xFFAA8E83),fontFamily: context.translate(
'Roboto',
'NotoKufi',
), // Text color
color: Color(0xFFAA8E83),
fontFamily: context.translate(
'Roboto',
'NotoKufi',
), // Text color
),
),
),
@ -499,10 +525,11 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
'تسجيل الخروج',
),
style: TextStyle(
color: Colors.white, fontFamily: context.translate(
'Roboto',
'NotoKufi',
),// Text color
color: Colors.white,
fontFamily: context.translate(
'Roboto',
'NotoKufi',
), // Text color
),
),
),
@ -528,6 +555,15 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
(themeMode == ThemeMode.system &&
MediaQuery.of(context).platformBrightness == Brightness.dark);
final searchTerm = '';
final _countries = ISOCountry.values.where((country) {
final query = searchTerm.trim().toLowerCase();
if (query.isEmpty) return true; // 🔥 show all if search is empty
return country.nameEN.toLowerCase().contains(query) ||
country.nameAR.toLowerCase().contains(query);
}).toList();
return PopScope(
canPop: false, // Allow back navigation only if not login screen
onPopInvokedWithResult: (didPop, result) {
@ -541,16 +577,23 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
elevation: 0,
leading: IconButton(
icon: Icon(Icons.arrow_back_ios_new, color: Colors.black),
onPressed: () {
context.go('/');
onPressed: () async {
final prefs = await SharedPreferences.getInstance();
await _authRepo.logout();
prefs.clear();
context.go('/login');
// context.go('/');
},
),
title: Text(
AppLocalizations.of(context)!.my_profile,
style: TextStyle(color: Color(0xFF985400),fontFamily: context.translate(
'Roboto',
'NotoKufi',
),),
style: TextStyle(
color: Color(0xFF985400),
fontFamily: context.translate(
'Roboto',
'NotoKufi',
),
),
),
actions: [
Consumer(
@ -633,7 +676,7 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
backgroundImage: _profileImage != null
? FileImage(_profileImage!)
: AssetImage("assets/edit_profile/profile.png")
as ImageProvider,
as ImageProvider,
child: Align(
alignment: Alignment.bottomRight,
child: GestureDetector(
@ -657,7 +700,7 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
child: CircularProgressIndicator(
strokeWidth: 2,
valueColor:
AlwaysStoppedAnimation<Color>(Colors.grey),
AlwaysStoppedAnimation<Color>(Colors.grey),
),
),
],
@ -745,10 +788,13 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
Text(
AppLocalizations.of(context)!.full_name,
style: TextStyle(
fontSize: 16, fontWeight: FontWeight.w500,fontFamily: context.translate(
'Roboto',
'NotoKufi',
),),
fontSize: 16,
fontWeight: FontWeight.w500,
fontFamily: context.translate(
'Roboto',
'NotoKufi',
),
),
),
],
),
@ -776,8 +822,11 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(10),
borderSide: BorderSide(
color: isDarkTheme ? Colors.white : MyTheme.topicColor(IndicatorTopic.economy)
.shade400,
color: Color(0xFFB68A34),
// color: isDarkTheme
// ? Colors.white
// : MyTheme.topicColor(IndicatorTopic.economy)
// .shade400,
width: 1), // Enabled border
),
hintText: _showHints[2] ? 'Enter the name' : null,
@ -791,7 +840,9 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
),
border: OutlineInputBorder(
borderSide: BorderSide(
color: isDarkTheme ? Colors.white : Color(0xFF7296BE),
color: Color(0xFFB68A34),
// color:
// isDarkTheme ? Colors.white : Color(0xFF7296BE),
),
borderRadius: BorderRadius.circular(8),
),
@ -807,12 +858,13 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
Text(
AppLocalizations.of(context)!.dob,
style: TextStyle(
fontFamily: context.translate(
'Roboto',
'NotoKufi',
),
fontSize: 16, fontWeight: FontWeight.w500,
color:isDarkTheme ? Colors.white : null,
fontFamily: context.translate(
'Roboto',
'NotoKufi',
),
fontSize: 16,
fontWeight: FontWeight.w500,
color: isDarkTheme ? Colors.white : null,
),
),
],
@ -828,14 +880,19 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(10),
borderSide: BorderSide(
color:isDarkTheme ? Colors.white :
MyTheme.topicColor(IndicatorTopic.economy)
.shade400,
color: Color(0xFFB68A34),
// color: isDarkTheme
// ? Colors.white
// : MyTheme.topicColor(IndicatorTopic.economy)
// .shade400,
width: 1), // Enabled border
),
border: OutlineInputBorder(
borderSide: BorderSide(
color:isDarkTheme ? Colors.white : Color(0xFF7296BE),
color: Color(0xFFB68A34),
// color: isDarkTheme
// ? Colors.white
// : Color(0xFF7296BE),
),
borderRadius: BorderRadius.circular(8),
),
@ -846,7 +903,9 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
'Roboto',
'NotoKufi',
),
color: isDarkTheme ? Colors.white : Color(0xFFC3C6CB),
color:
isDarkTheme ? Colors.white : Color(0xFFC3C6CB),
// color: Color(0xFFB68A34),
fontSize: 14,
),
@ -854,11 +913,11 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
width: 45,
padding: EdgeInsets.only(right: 1),
alignment:
Alignment.center, // Center the icon vertically
Alignment.center, // Center the icon vertically
child: Icon(
Icons.keyboard_arrow_down_sharp,
color:
_isHoveringDate ? Colors.black : Colors.grey,
_isHoveringDate ? Colors.black : Colors.grey,
),
),
),
@ -878,9 +937,9 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
'Roboto',
'NotoKufi',
),
fontSize: 16, fontWeight: FontWeight.w500,
color: isDarkTheme ? Colors.white : null
),
fontSize: 16,
fontWeight: FontWeight.w500,
color: isDarkTheme ? Colors.white : null),
),
],
),
@ -890,20 +949,26 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
setState(() => _isHoveringDropdown = true),
onExit: (_) =>
setState(() => _isHoveringDropdown = false),
child: DropdownButtonFormField<String>(
child: DropdownButtonFormField<ISOCountry>(
isExpanded: true,
value: _selectedCountry,
decoration: InputDecoration(
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(10),
borderSide: BorderSide(
color: isDarkTheme ? Colors.white :
MyTheme.topicColor(IndicatorTopic.economy)
.shade400,
color: Color(0xFFB68A34),
// color: Colors.red,
// : MyTheme.topicColor(
// IndicatorTopic.economy).shade400,
width: 1), // Enabled border
),
border: OutlineInputBorder(
borderSide: BorderSide(
color: isDarkTheme ? Colors.white : Color(0xFF7296BE),
color: Color(0xFFB68A34),
// color: isDarkTheme
// ? Colors.white
// : Color(0xFF7296BE),
),
borderRadius: BorderRadius.circular(8),
),
@ -913,25 +978,90 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
? Colors.black
: Colors.grey),
items: _countries
.map((item) => DropdownMenuItem<String>(
value: item,
child: Text(item,
style: TextStyle(
fontFamily: context.translate(
'Roboto',
'NotoKufi',
),
color: isDarkTheme ? Colors.white : null,
),),
))
.map((item) => DropdownMenuItem<ISOCountry>(
value: item,
child: SizedBox(
width: double.infinity,
child: Text(
// item.nameEN,
context.translate(
item.nameEN, item.nameAR),
overflow: TextOverflow.ellipsis,
maxLines: 1,
style: TextStyle(
fontFamily: context.translate(
'Roboto',
'NotoKufi',
),
// color: Colors.red
color:
isDarkTheme ? Colors.white : null,
),
),
),
))
.toList(),
onChanged: (String? newValue) {
onChanged: (ISOCountry? newValue) {
setState(() {
_selectedCountry = newValue;
});
},
validator: _validateDropdown,
validator: (value) {
if (value == null)
return context.translate(
'Please select a country', 'يرجى اختيار دولة');
return null;
},
),
//Available Default Four Countries
// child: DropdownButtonFormField<String>(
// value: _selectedCountry,
// decoration: InputDecoration(
// enabledBorder: OutlineInputBorder(
// borderRadius: BorderRadius.circular(10),
// borderSide: BorderSide(
// color: Color(0xFFB68A34),
// // : MyTheme.topicColor(
// // IndicatorTopic.economy).shade400,
// width: 1), // Enabled border
// ),
// border: OutlineInputBorder(
// borderSide: BorderSide(
// color: Color(0xFFB68A34),
// // color: isDarkTheme
// // ? Colors.white
// // : Color(0xFF7296BE),
// ),
// borderRadius: BorderRadius.circular(8),
// ),
// labelText: context.translate('Select', ' اختيار')),
// icon: Icon(Icons.keyboard_arrow_down_sharp,
// color: _isHoveringDropdown
// ? Colors.black
// : Colors.grey),
// items: _countries
// .map((item) => DropdownMenuItem<String>(
// value: item,
// child: Text(
// item,
// style: TextStyle(
// fontFamily: context.translate(
// 'Roboto',
// 'NotoKufi',
// ),
// color: isDarkTheme ? Colors.white : null,
// ),
// ),
// ))
// .toList(),
// onChanged: (String? newValue) {
// setState(() {
// _selectedCountry = newValue;
// });
// },
// validator: _validateDropdown,
// ),
),
SizedBox(height: 10),
Row(
@ -940,12 +1070,13 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
Text(
AppLocalizations.of(context)!.preferredLang,
style: TextStyle(
fontFamily: context.translate(
'Roboto',
'NotoKufi',
),
fontSize: 16, fontWeight: FontWeight.w500,
color: isDarkTheme ? Colors.white : null,
fontFamily: context.translate(
'Roboto',
'NotoKufi',
),
fontSize: 16,
fontWeight: FontWeight.w500,
color: isDarkTheme ? Colors.white : null,
),
),
],
@ -962,14 +1093,18 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(10),
borderSide: BorderSide(
color: isDarkTheme ? Colors.white :
MyTheme.topicColor(IndicatorTopic.economy)
.shade400,
color: Color(0xFFB68A34),
// : MyTheme.topicColor(
// IndicatorTopic.economy)
// .shade400,
width: 1), // Enabled border
),
border: OutlineInputBorder(
borderSide: BorderSide(
color: isDarkTheme ? Colors.white : Color(0xFF7296BE),
color: Color(0xFFB68A34),
// color: isDarkTheme
// ? Colors.white
// : Color(0xFF7296BE),
),
borderRadius: BorderRadius.circular(8),
),
@ -980,16 +1115,18 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
: Colors.grey),
items: preferred_language
.map((item) => DropdownMenuItem<String>(
value: item,
child: Text(item,
style: TextStyle(
fontFamily: context.translate(
'Roboto',
'NotoKufi',
),
color: isDarkTheme ? Colors.white : null,
),),
))
value: item,
child: Text(
item,
style: TextStyle(
fontFamily: context.translate(
'Roboto',
'NotoKufi',
),
color: isDarkTheme ? Colors.white : null,
),
),
))
.toList(),
onChanged: (String? newValue) {
setState(() {
@ -1012,9 +1149,14 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
},
side: BorderSide(
color: showError
? isDarkTheme ? Color(0xFFFFA200) : Color(0xFFb22222)
: isDarkTheme ? Colors.white : Color(0xFF7296BE),
? isDarkTheme
? Color(0xFFB68A34)
: Color(0xFFb22222)
: Color(0xFFB68A34),
// : isDarkTheme
// ? Colors.white
// : Color(0xFF7296BE),
width: 1,
),
),
@ -1034,7 +1176,10 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
),
fontWeight: FontWeight.w500,
fontSize: 14,
color: isDarkTheme ? Colors.white : Color(0xFF898C81), // Change to your desired color
color: isDarkTheme
? Colors.white
: Color(
0xFF898C81), // Change to your desired color
),
children: [
TextSpan(
@ -1051,11 +1196,16 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
),
fontSize: 14,
fontWeight: FontWeight.bold,
color: isDarkTheme ? Color(0xFF9EB3E4) : Color(0xFF985400),
color: Color(0xFFB68A34),
// color: isDarkTheme
// ? Color(0xFF9EB3E4)
// : Color(0xFF985400),
// Makes the text bold
// decoration:
// TextDecoration.underline,
decorationColor: Color(0xFF985400),
decorationColor: Color(0xFFB68A34),
// decorationColor: Color(0xFF985400),
decorationThickness: 1),
),
TextSpan(
@ -1065,7 +1215,9 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
'Roboto',
'NotoKufi',
),
color: isDarkTheme ? Colors.white : Color(
color: isDarkTheme
? Colors.white
: Color(
0xFF898C81), // Change to your desired color
),
),
@ -1082,10 +1234,14 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
'Roboto',
'NotoKufi',
),
color: isDarkTheme ? Color(0xFF9EB3E4) : Color(0xFF985400),
color: Color(0xFFB68A34),
// color: isDarkTheme
// ? Color(0xFF9EB3E4)
// : Color(0xFF985400),
// decoration:
// TextDecoration.underline,
decorationColor: Color(0xFF648CBA),
decorationColor: Color(0xFFB68A34),
decorationThickness: 1),
),
TextSpan(
@ -1098,7 +1254,9 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
),
fontWeight: FontWeight.w500,
fontSize: 14,
color: isDarkTheme ? Colors.white : Color(
color: isDarkTheme
? Colors.white
: Color(
0xFF898C81), // Change to your desired color
),
),
@ -1147,7 +1305,10 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
AppLocalizations.of(context)!.change_password,
style: TextStyle(
// color: Color(0xFF648CBA),
color: isDarkTheme ? Color(0xFF9EB3E4) : Color(0xFF985400),
color: Color(0xFFB68A34),
// color: isDarkTheme
// ? Color(0xFF9EB3E4)
// : Color(0xFF985400),
fontSize: 14,
fontWeight: FontWeight.w700,
fontFamily: context.translate(
@ -1173,12 +1334,15 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
} else {
setState(() {
showError =
!isChecked; // Show error if the checkbox is not checked
!isChecked; // Show error if the checkbox is not checked
});
}
},
style: ElevatedButton.styleFrom(
backgroundColor: isDarkTheme ? Color(0xFF7296BE) :Color(0xFF92722A),
backgroundColor: Color(0xFFB68A34),
// backgroundColor:
// isDarkTheme ? Color(0xFF7296BE) : Color(0xFF92722A),
minimumSize: Size(double.infinity, 50),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8),
@ -1186,14 +1350,17 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
),
child: Row(
mainAxisAlignment:
MainAxisAlignment.center, // Center the content
MainAxisAlignment.center, // Center the content
children: [
Text(
AppLocalizations.of(context)!.save,
style: TextStyle(color: Colors.white,fontFamily: context.translate(
'Roboto',
'NotoKufi',
),),
style: TextStyle(
color: Colors.white,
fontFamily: context.translate(
'Roboto',
'NotoKufi',
),
),
),
SizedBox(width: 8), // Add space between text and icon
Image.asset(
@ -1258,35 +1425,36 @@ class ConfirmationDialog extends ConsumerWidget {
children: [
TextSpan(
text: AppLocalizations.of(context)!.name,
style:
TextStyle(fontWeight: FontWeight.w700,fontFamily: context.translate(
'Roboto',
'NotoKufi',
),color: isDarkTheme ? Colors.white : null), // Bold for "name"
),
TextSpan(
text: context.translate(' or ', 'أو'),
style: TextStyle(
color: isDarkTheme ? Colors.white : null,
)
),
TextSpan(
text: AppLocalizations.of(context)!.dob,
style: TextStyle(
fontWeight: FontWeight.w700,
fontFamily: context.translate(
'Roboto',
'NotoKufi',
),
fontWeight: FontWeight.w700,
color: isDarkTheme ? Colors.white : null,
color:
isDarkTheme ? Colors.white : null), // Bold for "name"
),
TextSpan(
text: context.translate(' or ', 'أو'),
style: TextStyle(
color: isDarkTheme ? Colors.white : null,
)),
TextSpan(
text: AppLocalizations.of(context)!.dob,
style: TextStyle(
fontFamily: context.translate(
'Roboto',
'NotoKufi',
),
fontWeight: FontWeight.w700,
color: isDarkTheme ? Colors.white : null,
), // Bold for "date of birth"
),
TextSpan(
text: ".",
style: TextStyle(
color: isDarkTheme ? Colors.white : null,
)
),
text: ".",
style: TextStyle(
color: isDarkTheme ? Colors.white : null,
)),
],
),
textAlign: TextAlign.center,
@ -1309,23 +1477,36 @@ class ConfirmationDialog extends ConsumerWidget {
Navigator.of(context).pop(false);
},
style: OutlinedButton.styleFrom(
side: BorderSide(color: isDarkTheme ? Color(0xFF7296BE) : Color(0xFF92722A)),
side: BorderSide(color: Color(0xFFB68A34)
// color:
// isDarkTheme ? Color(0xFF7296BE) : Color(0xFF92722A)
//
),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(7)),
), // Set the border color here
),
child: Text(
"Cancel",
style: TextStyle(color: isDarkTheme ? Color(0xFF7296BE) : Color(0xFF92722A),fontFamily: context.translate(
'Roboto',
'NotoKufi',
),),
style: TextStyle(
color: Color(0xFFB68A34),
// color: isDarkTheme ? Color(0xFF7296BE) : Color(0xFF92722A),
fontFamily: context.translate(
'Roboto',
'NotoKufi',
),
),
),
),
ElevatedButton(
onPressed: () => Navigator.of(context).pop(true),
style: ElevatedButton.styleFrom(
backgroundColor: isDarkTheme ? Color(0xFF7296BE) : Color(0xFF92722A), // Brown color
backgroundColor: Color(0xFFB68A34),
// backgroundColor: isDarkTheme
// ? Color(0xFF7296BE)
// : Color(0xFF92722A), // Brown color
foregroundColor: Colors.white,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8),
@ -1351,4 +1532,4 @@ class ConfirmationDialog extends ConsumerWidget {
],
);
}
}
}

View File

@ -40,12 +40,12 @@ extension Dialogs on BuildContext {
/// If [errorDialogBuilder] is provided, an
/// [showLogBtn] is also true exception is thrown;
Future<T> loaderWithErrorDialog<T>(
FutureOr<T> Function() computation, {
Future<void> Function(
Object error, [
StackTrace stackTrace,
])? errorDialogBuilder,
}) async {
FutureOr<T> Function() computation, {
Future<void> Function(
Object error, [
StackTrace stackTrace,
])? errorDialogBuilder,
}) async {
final loaderContext = await _pushLoaderDialog();
late final T value;
try {
@ -100,20 +100,17 @@ extension Dialogs on BuildContext {
final contentText = Text(content);
return AlertDialog(
title: Text(title,
style: TextStyle(
color: Color(0xFF898C81),
fontWeight: FontWeight.w700)
),
style: TextStyle(
color: Color(0xFF898C81), fontWeight: FontWeight.w700)),
content: content.length > 300
? SingleChildScrollView(
child:Text(
content,
style: TextStyle(color: Color(0xFF898C81))
),
)
child: Text(content,
style: TextStyle(color: Color(0xFF898C81))),
)
: Text(
content,
style: TextStyle(color:Color(0xFF898C81)), // Set content text color
style: TextStyle(
color: Color(0xFF898C81)), // Set content text color
),
actions: [
TextButton(
@ -122,11 +119,12 @@ extension Dialogs on BuildContext {
rootNavigator: true,
).pop,
style: TextButton.styleFrom(
backgroundColor: Color(0xFFAA8E83), // Background color
// backgroundColor: Color(0xFFAA8E83), // Background color
backgroundColor: Color(0xFFB68A34), // Background color
foregroundColor: Colors.white, // Font (text) color
side: BorderSide(
// color: Color(0xFF92722A)), // Border outline color
color: Color(0xFFAA8E83)), // Border outline color
// color: Color(0xFF92722A)), // Border outline color
color: Color(0xFFB68A34)), // Border outline color
shape: RoundedRectangleBorder(
borderRadius:
BorderRadius.circular(8), // Optional: Rounded corners
@ -154,11 +152,11 @@ extension Dialogs on BuildContext {
);
Future<bool?> confirmationDialog(
String titleText,
String contentText, {
String cancelText = 'Cancel',
String confirmText = 'Confirm',
}) =>
String titleText,
String contentText, {
String cancelText = 'Cancel',
String confirmText = 'Confirm',
}) =>
showDialog<bool>(
context: this,
barrierDismissible: false,

View File

@ -10,6 +10,7 @@ import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'package:go_router/go_router.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:jwt_decoder/jwt_decoder.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:the_validator/the_validator.dart';
import 'package:uae_stat/config/app_links_helper.dart';
@ -18,8 +19,10 @@ import 'package:uae_stat/config/my_theme.dart';
import 'package:uae_stat/config/theme/app_theme.dart';
import 'package:uae_stat/config/theme/service.dart';
import 'package:uae_stat/config/theme/theme_provider.dart';
import 'package:uae_stat/domain/entities/session_entity.dart';
import 'package:uae_stat/domain/use_cases/auth_use_case.dart';
import 'package:uae_stat/domain/use_cases/language.dart';
import 'package:uae_stat/infrastructure/data/p_auth_repo.dart';
import 'package:uae_stat/infrastructure/services/img_asset_paths/banner_asset_path.dart';
import 'package:uae_stat/infrastructure/services/img_asset_paths/icons/misc_icon_asset_path.dart';
import 'package:uae_stat/presentation/Screens/demo_home.dart';
@ -30,6 +33,7 @@ import 'package:uae_stat/presentation/components/space.dart';
import 'package:uae_stat/presentation/components/themed_text_field.dart';
import 'package:uae_stat/presentation/routes/bottom_bar_routes/tab_routes/home_route.dart';
import 'package:http/http.dart' as http;
import 'package:url_launcher/url_launcher.dart';
import '../../Screens/auth_verification/registration.dart';
import 'package:pocketbase/pocketbase.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
@ -325,6 +329,175 @@ class LoginRoute extends HookConsumerWidget {
print('themeMode $themeMode');
}
Future<void> googleLogin(BuildContext context, WidgetRef ref,platform) async {
print(platform);
try {
final authData =
await pb.collection('users').authWithOAuth2(platform, (url) async {
await launchUrl(url);
});
print(authData);
// Check if authData is valid
if (authData.token.isNotEmpty && authData.record != null) {
print("✅ Login Successful");
print(authData.record);
final userDetails = authData.record;
final userId = userDetails?.id;
final email = userDetails?.data['email'] ?? '';
final isProfileComplete =
userDetails?.data['is_profile_completed'] ?? '';
final loginCount = userDetails?.data['login_count'] ?? '';
print("User ID: ${userId}");
print("Email: ${email}");
print("Email: ${isProfileComplete}");
print("Email: ${loginCount}");
await saveUserId(userId!, loginCount);
// await getDeviceToken(context, id);
await initializeTheme(context, ref, userId);
final session = await context.loaderWithErrorDialog(
() => ref
.read(
authUseCaseProvider.notifier,
)
.googleAndAppleAuthencation(authData),
errorDialogBuilder: (
error, [
StackTrace? stackTrace,
]) {
if (error == LoginError.invalidEmailPw) {
return context.simpleDialog(
title: context.translate(
'Incorrect Credentials',
'أوراق غير صحيحة',
),
content: context.translate(
'Your email or password is invalid. Please try again.',
'بريدك الإلكتروني أو كلمة المرور غير صالحة. حاول مرة اخرى.',
),
);
}
return context.simpleDialog();
},
);
print("sessionTST - $session");
// final se = _sessionEntityFromPocketbaseRecord(authData);
// await _LocalAuthRepo.storeLocally(se);
// Extract intendedPath from query parameters (if coming from redirect)
final String? intendedPath =
GoRouterState.of(context).uri.queryParameters['intendedPath'];
print("Extracted intendedPath after login: $intendedPath");
if (isProfileComplete) {
print('Redirecting to Home / Intended Path');
// **Set Default Locale in Provider**
if (preferredLanguage == 'ar') {
ref.read(localeProvider.notifier).setLocale(const Locale('ar'));
} else {
ref.read(localeProvider.notifier).setLocale(const Locale('en'));
}
context.go(intendedPath ?? '/myhomepage');
} else {
print('Redirecting to Profile Setup');
context.go('/profile/$userId');
}
} else {
print("❌ Login failed: Invalid authData");
}
} catch (e) {
print("❌ Error during Google login: $e");
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text("Login failed. Please try again.")),
);
}
}
// SessionEntity _sessionEntityFromPocketbaseRecord(RecordAuth ra) {
// final decodedToken = JwtDecoder.decode(ra.token);
// final expInSeconds = decodedToken['exp'];
// final expInMilliseconds = expInSeconds * 1000;
// final expiresOn = DateTime.fromMillisecondsSinceEpoch(expInMilliseconds);
// final se = SessionEntity(
// id: ra.record!.id,
// expiresOn: expiresOn,
// token: ra.token,
// modelJson: ra.record!.toJson(),
// );
// return se;
// }
// Future<void> googleLogin(BuildContext context,WidgetRef ref) async {
// try {
// final authData = await pb.collection('users').authWithOAuth2('apple', (url) async {
// await launchUrl(url);
// });
// print(authData);
// // Check if authData is valid
// if (authData.token.isNotEmpty && authData.record != null) {
//
//
// print("✅ Login Successful");
// print(authData.record);
//
//
// final userDetails = authData.record;
// final userId = userDetails?.id;
// final email = userDetails?.data['email'] ?? '';
// final isProfileComplete = userDetails?.data['is_profile_completed'] ?? '';
// final loginCount = userDetails?.data['login_count'] ?? '';
// // final verified = userDetails?.data['verified'] ?? '';
//
// final se = _sessionEntityFromPocketbaseRecord(authData);
// await _LocalAuthRepo.storeLocally(se);
//
// print("User ID: ${userId}");
// print("Email: ${email}");
// print("Email: ${isProfileComplete}");
// print("Email: ${loginCount}");
//
// await saveUserId(userId!, loginCount);
// // await getDeviceToken(context, id);
// await initializeTheme(context,ref,userId);
//
// // Extract intendedPath from query parameters (if coming from redirect)
// final String? intendedPath =
// GoRouterState.of(context).uri.queryParameters['intendedPath'];
// print("Extracted intendedPath after login: $intendedPath");
//
// if (isProfileComplete) {
// print('Redirecting to Home / Intended Path');
// // **Set Default Locale in Provider**
// if (preferredLanguage == 'ar') {
// ref.read(localeProvider.notifier).setLocale(const Locale('ar'));
// } else {
// ref.read(localeProvider.notifier).setLocale(const Locale('en'));
// }
// context.go(intendedPath ?? '/myhomepage');
// } else {
// print('Redirecting to Profile Setup');
//
// context.go('/profile/$userId');
//
// }
// } else {
// print("❌ Login failed: Invalid authData");
// }
// } catch (e) {
// print("❌ Error during Google login: $e");
// ScaffoldMessenger.of(context).showSnackBar(
// SnackBar(content: Text("Login failed. Please try again.")),
// );
// }
// }
@override
Widget build(BuildContext context, WidgetRef ref) {
@ -662,9 +835,9 @@ class LoginRoute extends HookConsumerWidget {
print("Is Profile Complete: $isProfileComplete");
// Extract intendedPath from query parameters (if coming from redirect)
final String? intendedPath =
GoRouterState.of(context).uri.queryParameters['intendedPath'];
print("Extracted intendedPath after login: $intendedPath");
// final String? intendedPath =
// GoRouterState.of(context).uri.queryParameters['intendedPath'];
// print("Extracted intendedPath after login: $intendedPath");
if (!context.mounted) return;
@ -676,7 +849,7 @@ class LoginRoute extends HookConsumerWidget {
} else {
ref.read(localeProvider.notifier).setLocale(const Locale('en'));
}
context.go(intendedPath ?? '/myhomepage');
context.go('/myhomepage');
} else {
print('Redirecting to Profile Setup');
if (userId.isNotEmpty) {
@ -972,7 +1145,9 @@ class LoginRoute extends HookConsumerWidget {
final signInWithGoogleBtn = SizedBox(
width: double.infinity,
child: OutlinedButton(
onPressed: () async {},
onPressed: () async {
googleLogin(context,ref,'google');
},
style: OutlinedButton.styleFrom(
side: const BorderSide(color: Color(0xFF000000)),
shape: RoundedRectangleBorder(
@ -1010,7 +1185,9 @@ class LoginRoute extends HookConsumerWidget {
final signInWithAppleBtn = SizedBox(
width: double.infinity,
child: OutlinedButton(
onPressed: () async {},
onPressed: () async {
googleLogin(context,ref,'apple');
},
style: OutlinedButton.styleFrom(
side: const BorderSide(color: Color(0xFF000000)),
shape: RoundedRectangleBorder(
@ -1219,3 +1396,30 @@ class LoginRoute extends HookConsumerWidget {
// );
// }
}
// abstract class _LocalAuthRepo {
// static const _key = 'session';
// static const _storage = FlutterSecureStorage();
//
// static Future<SessionEntity?> fetchLocallyStored() async {
// final e = await _storage.read(key: _key);
// if (e == null) return null;
// final se = SessionEntity.fromJson(e);
// if (se.freshness == SessionFreshness.expired) {
// await clear();
// return null;
// }
// return se;
// }
//
// static Future<void> storeLocally(
// SessionEntity se,
// ) =>
// _storage.write(
// key: _key,
// value: se.toJson(),
// );
//
// static Future<void> clear() => _storage.delete(key: _key);
// }

View File

@ -1092,8 +1092,8 @@ class EconomyStatsState extends ConsumerState<EconomyStatsWidget> {
currentTheme = ref.read(themeProvider);
print('123456789');
print(currentTheme);
final isDark = currentTheme == ThemeMode.dark ||
(currentTheme == ThemeMode.system &&
final isDark = ref.read(themeProvider) == ThemeMode.dark ||
(ref.read(themeProvider) == ThemeMode.system &&
MediaQuery.of(context).platformBrightness == Brightness.dark);
final themeMode = (isDark ? 'dark' : 'light');
@ -1634,7 +1634,7 @@ class InfoCard extends StatelessWidget {
Text(
title,
style: TextStyle(
fontSize: 13,
fontSize: 12,
fontWeight: FontWeight.w700,
letterSpacing: 0,
// color: Colors.black,

View File

@ -6,6 +6,7 @@ import 'package:flutter_svg/svg.dart';
import 'package:go_router/go_router.dart';
import 'package:dio/dio.dart';
import 'package:http/http.dart' as http;
// import 'package:uae_stat/l10n/app_localizations.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:pocketbase/pocketbase.dart';
import 'package:shared_preferences/shared_preferences.dart';
@ -270,9 +271,9 @@ class _BookMarkState extends ConsumerState<BookMark> {
AppLocalizations.of(context)!.removed_from_Bookmark,
style: TextStyle(
fontFamily: context.translate(
'Roboto',
'NotoKufi',
)),
'Roboto',
'NotoKufi',
)),
),
duration: Duration(seconds: 2),
),
@ -389,7 +390,7 @@ class _BookMarkState extends ConsumerState<BookMark> {
foregroundColor: Colors.white,
shape: RoundedRectangleBorder(
borderRadius:
BorderRadius.circular(10.0), // Set text color
BorderRadius.circular(10.0), // Set text color
),
),
child: Text(
@ -463,7 +464,8 @@ class _BookMarkState extends ConsumerState<BookMark> {
final List<Map<String, dynamic>> tabs = [
{
'title': AppLocalizations.of(context)!.all_bookmarks,
'color': isDarkTheme ? Colors.white : Colors.black,
'color': isDarkTheme ? Colors.white : Color(0xFFB68A34),
// 'color': isDarkTheme ? Colors.white : Colors.black,
},
{
'title': AppLocalizations.of(context)!.economy_title,
@ -480,11 +482,11 @@ class _BookMarkState extends ConsumerState<BookMark> {
];
List<Map<String, dynamic>> bookmarks =
dataList.where((item) => item['isBookmark'] == true).toList();
dataList.where((item) => item['isBookmark'] == true).toList();
List<Map<String, dynamic>> filteredBookmarks = dataList.where((bookmark) {
String mainTopic = bookmark['main_topic'].toString().trim().toLowerCase();
String selectedTabTitle =
tabs[selectedTabIndex]['title'].toString().trim().toLowerCase();
tabs[selectedTabIndex]['title'].toString().trim().toLowerCase();
// Debugging prints
print(
@ -515,206 +517,212 @@ class _BookMarkState extends ConsumerState<BookMark> {
),
body: isLoading
? Container(
color: isDarkTheme ? Color(0xFF111111) : Colors.white,
color: isDarkTheme ? Color(0xFF111111) : Colors.white,
// color: Color(0x98FFFCE5), // Semi-transparent background
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Container(
margin: EdgeInsets.symmetric(
horizontal: 40), // Left & Right space
child: LinearProgressIndicator(
minHeight: 5, // Adjust thickness
backgroundColor:
Colors.grey[100], // Optional: Background color
valueColor: AlwaysStoppedAnimation<Color>(
Color(0xFFAA8E83)), // Loader color
),
),
],
),
)
: Column(
children: [
TabBarHeader(
tabs: tabs,
selectedIndex: selectedTabIndex,
onTabSelected: (index) {
setState(() {
selectedTabIndex = index;
});
},
isDarkTheme: isDarkTheme),
Expanded(
child: selectedTabIndex == 0
? (bookmarks.isNotEmpty
? SingleChildScrollView(
child: Column(
children: List.generate(
transformedList.length, (i) {
final mainTopic = transformedList[i];
print('oustside1 $mainTopic');
final list =
List.from(mainTopic['SubTopic'] ?? []);
print('oustside2 $list');
return CustomExpandableTile(
index: i,
isExpanded: expandedIndex == i,
onTap: (int index) {
// 🔹 Expecting an index
setState(() {
expandedIndex =
(expandedIndex == index)
? null
: index;
});
},
title:
mainTopic['main_topic'] ?? 'No Topic',
childWidget: Container(
decoration: BoxDecoration(
color: isDarkTheme
? Color(0xFF111111)
: Colors.white,
// borderRadius: BorderRadius.all(Radius.circular(20))
),
padding: const EdgeInsets.all(16),
child: GridView.builder(
shrinkWrap: true,
physics:
NeverScrollableScrollPhysics(),
gridDelegate:
const SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
crossAxisSpacing: 10.0,
mainAxisSpacing: 10.0,
mainAxisExtent: 100,
),
itemCount: list.length,
itemBuilder: (context, index) {
return _buildBoxes(
mainTopic['SubTopic'][index],
context,
mainTopic['valueColor'],
isDarkTheme);
},
),
),
filteredBookmarks: List.from(
mainTopic['SubTopic'] ?? []),
titleBackgroundColor:
mainTopic['valueColor'],
// Ensure it's a new list
isDarkTheme: isDarkTheme,
);
}),
),
)
: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Container(
margin: EdgeInsets.symmetric(
horizontal: 40), // Left & Right space
child: LinearProgressIndicator(
minHeight: 5, // Adjust thickness
backgroundColor:
Colors.grey[100], // Optional: Background color
valueColor: AlwaysStoppedAnimation<Color>(
Color(0xFFAA8E83)), // Loader color
Icon(Icons.info_outline,
size: 100, color: Colors.grey[400]),
SizedBox(height: 16),
Text(
context.translate('No BookMark Added',
'لم يتم إضافة أي علامة مرجعية'),
style: TextStyle(
fontFamily: context.translate(
'Roboto',
'NotoKufi',
),
fontSize: 16,
color: Colors.grey),
),
],
),
))
: filteredBookmarks.isEmpty
? Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(Icons.info_outline,
size: 100, color: Colors.grey[400]),
SizedBox(height: 16),
Text(
context.translate('No BookMark Added',
'لم يتم إضافة أي علامة مرجعية'),
style: TextStyle(
fontSize: 16,
color: Colors.grey,
fontFamily: context.translate(
'Roboto',
'NotoKufi',
),
),
),
],
),
)
: Column(
children: [
TabBarHeader(
tabs: tabs,
selectedIndex: selectedTabIndex,
onTabSelected: (index) {
setState(() {
selectedTabIndex = index;
});
},
isDarkTheme: isDarkTheme),
Expanded(
child: selectedTabIndex == 0
? (bookmarks.isNotEmpty
? SingleChildScrollView(
child: Column(
children: List.generate(
transformedList.length, (i) {
final mainTopic = transformedList[i];
print('oustside1 $mainTopic');
final list =
List.from(mainTopic['SubTopic'] ?? []);
print('oustside2 $list');
return CustomExpandableTile(
index: i,
isExpanded: expandedIndex == i,
onTap: (int index) {
// 🔹 Expecting an index
setState(() {
expandedIndex =
(expandedIndex == index)
? null
: index;
});
},
title:
mainTopic['main_topic'] ?? 'No Topic',
childWidget: Container(
decoration: BoxDecoration(
color: isDarkTheme
? Color(0xFF111111)
: Colors.white,
// borderRadius: BorderRadius.all(Radius.circular(20))
),
padding: const EdgeInsets.all(16),
child: GridView.builder(
shrinkWrap: true,
physics:
NeverScrollableScrollPhysics(),
gridDelegate:
const SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
crossAxisSpacing: 10.0,
mainAxisSpacing: 10.0,
mainAxisExtent: 100,
),
itemCount: list.length,
itemBuilder: (context, index) {
return _buildBoxes(
mainTopic['SubTopic'][index],
context,
mainTopic['valueColor'],
isDarkTheme);
},
),
),
filteredBookmarks: List.from(
mainTopic['SubTopic'] ?? []),
titleBackgroundColor:
mainTopic['valueColor'],
// Ensure it's a new list
isDarkTheme: isDarkTheme,
);
}),
),
)
: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(Icons.info_outline,
size: 100, color: Colors.grey[400]),
SizedBox(height: 16),
Text(
context.translate('No BookMark Added',
'لم يتم إضافة أي علامة مرجعية'),
style: TextStyle(
fontFamily: context.translate(
'Roboto',
'NotoKufi',
),
fontSize: 16,
color: Colors.grey),
),
],
),
))
: filteredBookmarks.isEmpty
? Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(Icons.info_outline,
size: 100, color: Colors.grey[400]),
SizedBox(height: 16),
Text(
context.translate('No BookMark Added',
'لم يتم إضافة أي علامة مرجعية'),
style: TextStyle(
fontSize: 16,
color: Colors.grey,
fontFamily: context.translate(
'Roboto',
'NotoKufi',
),
),
),
],
),
)
: Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
children: [
Container(
decoration: BoxDecoration(
color: tabs[selectedTabIndex]
['color'],
borderRadius: BorderRadius.all(
Radius.circular(35))),
padding: const EdgeInsets.only(
left: 16,
bottom: 5,
top: 5,
right: 10),
child: Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Text(
tabs[selectedTabIndex]['title'],
style: TextStyle(
fontFamily: context.translate(
'Roboto',
'NotoKufi',
),
color: Colors.white,
fontWeight: FontWeight.w600,
fontSize: 20,
),
),
],
),
),
SizedBox(
height: 20,
),
Expanded(
child: GridView.builder(
gridDelegate:
const SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
crossAxisSpacing: 10.0,
mainAxisSpacing: 10.0,
mainAxisExtent: 100,
),
itemCount: filteredBookmarks.length,
itemBuilder: (context, index) {
return _buildBox(
filteredBookmarks[index],
context,
isDarkTheme);
},
),
),
],
),
: Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
children: [
Container(
decoration: BoxDecoration(
color: tabs[selectedTabIndex]
['color'],
borderRadius: BorderRadius.only(
topLeft: Radius.circular(20),
topRight: Radius.circular(20))
// borderRadius: BorderRadius.all(
// Radius.circular(35))
),
padding: const EdgeInsets.only(
left: 16,
bottom: 5,
top: 5,
right: 10),
child: Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Text(
tabs[selectedTabIndex]['title'],
style: TextStyle(
fontFamily: context.translate(
'Roboto',
'NotoKufi',
),
),
],
color: Colors.white,
fontWeight: FontWeight.w600,
fontSize: 20,
),
),
],
),
),
SizedBox(
height: 20,
),
Expanded(
child: GridView.builder(
gridDelegate:
const SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
crossAxisSpacing: 10.0,
mainAxisSpacing: 10.0,
mainAxisExtent: 100,
),
itemCount: filteredBookmarks.length,
itemBuilder: (context, index) {
return _buildBox(
filteredBookmarks[index],
context,
isDarkTheme);
},
),
),
],
),
),
),
],
),
),
);
}
@ -836,11 +844,11 @@ class _BookMarkState extends ConsumerState<BookMark> {
}
Widget _buildBoxes(
Map<String, dynamic> data,
BuildContext context,
Color styleColor,
bool isDarkTheme,
) {
Map<String, dynamic> data,
BuildContext context,
Color styleColor,
bool isDarkTheme,
) {
// Color borderColor = data['valueColor'];
print('inside function $data');
return GestureDetector(
@ -953,9 +961,9 @@ class TabBarHeader extends StatelessWidget {
TabBarHeader(
{required this.tabs,
required this.selectedIndex,
required this.onTabSelected,
required this.isDarkTheme});
required this.selectedIndex,
required this.onTabSelected,
required this.isDarkTheme});
@override
Widget build(BuildContext context) {
@ -975,7 +983,7 @@ class TabBarHeader extends StatelessWidget {
onPressed: () => onTabSelected(index),
style: ButtonStyle(
foregroundColor:
MaterialStateProperty.resolveWith((states) {
MaterialStateProperty.resolveWith((states) {
return selectedIndex == index
? entry.value['color']
: Colors.grey[700];
@ -1058,12 +1066,16 @@ class _CustomExpandableTileState extends State<CustomExpandableTile> {
color: widget.isDarkTheme
? Color(0xFF111111)
: Colors
.white, // Ensuring the background outside the rounded container is white
.white, // Ensuring the background outside the rounded container is white
),
child: Container(
decoration: BoxDecoration(
color: widget.titleBackgroundColor,
borderRadius: BorderRadius.all(Radius.circular(35))),
borderRadius: BorderRadius.only(
topLeft: Radius.circular(20),
topRight: Radius.circular(20))
// borderRadius: BorderRadius.all(Radius.circular(35))
),
padding: const EdgeInsets.only(
left: 16, bottom: 5, top: 5, right: 10),
child: Row(
@ -1102,9 +1114,9 @@ class _CustomExpandableTileState extends State<CustomExpandableTile> {
// height: widget.isExpanded ? myheight * 0.4 : 0,
child: widget.isExpanded
? SingleChildScrollView(
child: Column(
children: [
widget.childWidget,
child: Column(
children: [
widget.childWidget,
// Container(
// decoration: BoxDecoration(
// color: Colors.white,
@ -1127,9 +1139,9 @@ class _CustomExpandableTileState extends State<CustomExpandableTile> {
// },
// ),
// ),
],
),
)
],
),
)
: null,
),
),
@ -1137,4 +1149,4 @@ class _CustomExpandableTileState extends State<CustomExpandableTile> {
),
);
}
}
}

View File

@ -1714,10 +1714,10 @@ class _BaseScaffoldState extends ConsumerState<BaseScaffold> {
context.go('/uaenumbers');
break;
case 2:
context.go('/competitiveness');
// context.go('/competitiveness');
break;
case 3:
context.go('/countryprofile');
// context.go('/countryprofile');
break;
}
}

View File

@ -13,6 +13,7 @@ import file_selector_macos
import firebase_core
import firebase_messaging
import flutter_secure_storage_darwin
import google_sign_in_ios
import package_info_plus
import path_provider_foundation
import share_plus
@ -30,6 +31,7 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin"))
FLTFirebaseMessagingPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseMessagingPlugin"))
FlutterSecureStorageDarwinPlugin.register(with: registry.registrar(forPlugin: "FlutterSecureStorageDarwinPlugin"))
FLTGoogleSignInPlugin.register(with: registry.registrar(forPlugin: "FLTGoogleSignInPlugin"))
FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin"))
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
SharePlusMacosPlugin.register(with: registry.registrar(forPlugin: "SharePlusMacosPlugin"))

View File

@ -804,6 +804,54 @@ packages:
url: "https://pub.dev"
source: hosted
version: "14.8.1"
google_identity_services_web:
dependency: transitive
description:
name: google_identity_services_web
sha256: "5d187c46dc59e02646e10fe82665fc3884a9b71bc1c90c2b8b749316d33ee454"
url: "https://pub.dev"
source: hosted
version: "0.3.3+1"
google_sign_in:
dependency: "direct main"
description:
name: google_sign_in
sha256: "939a8b58f84c4053811b8c1bc9adbcb59449a15b37958264bbf60020698cca0e"
url: "https://pub.dev"
source: hosted
version: "7.1.1"
google_sign_in_android:
dependency: transitive
description:
name: google_sign_in_android
sha256: f256b8f0e6c09d135c166fe20b25256e24d60fe1a72e6bdc112a200bd0d555b4
url: "https://pub.dev"
source: hosted
version: "7.0.3"
google_sign_in_ios:
dependency: transitive
description:
name: google_sign_in_ios
sha256: c7ee744ebbcd98353966dbdee735d4fca085226f6bf725c6bea8a5c8fe0055bc
url: "https://pub.dev"
source: hosted
version: "6.1.0"
google_sign_in_platform_interface:
dependency: transitive
description:
name: google_sign_in_platform_interface
sha256: "8736443134d2cccadd4f228d600177cb3947e36683466a6ab96877ce6932885a"
url: "https://pub.dev"
source: hosted
version: "3.0.0"
google_sign_in_web:
dependency: transitive
description:
name: google_sign_in_web
sha256: "09ac306b2787b48f19c857b9f93375b654f774643c75bd6a1a078c85f4f7b468"
url: "https://pub.dev"
source: hosted
version: "1.0.0"
graphs:
dependency: transitive
description:

View File

@ -77,6 +77,7 @@ dependencies:
app_settings: ^6.1.1
appsflyer_sdk: ^6.16.2
dotted_border: ^2.1.0
google_sign_in: ^7.1.1
dependency_overrides:
fading_edge_scrollview: ^4.1.1