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 y/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/arm64-v8a/additional_project_files.txtC
A A
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  …Žœÿƒ3  ¡¹ñÀ÷2z ?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  <EFBFBD>àÕ€„3  ¡¹ñÀ÷2z
x 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 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 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 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 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 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 ö ¦¹ñÀ÷2s
q 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 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 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 {/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/armeabi-v7a/additional_project_files.txtC
A A
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  <EFBFBD>œÿƒ3  ¸ïòÀ÷2| ?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  ±àÕ€„3  ¸ïòÀ÷2|
z 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 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 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 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 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 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 € »ïòÀ÷2u
s 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 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 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 u
s/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/x86/additional_project_files.txtC s/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/x86/additional_project_files.txtC
A A
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  Œ<EFBFBD>œÿƒ3  „òòÀ÷2t ?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  ¿àÕ€„3  „òòÀ÷2t
r 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 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 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 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 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 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 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 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 Ø …òòÀ÷2m
k 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 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 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 x
v/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/x86_64/additional_project_files.txtC v/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/Debug/4y161to1/x86_64/additional_project_files.txtC
A A
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  <EFBFBD>œÿƒ3  •ôòÀ÷2w ?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  ÊàÕ€„3  •ôòÀ÷2w
u 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 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 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 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 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 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 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 ç ôòÀ÷2p
n 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 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 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 /Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/arm64-v8a/additional_project_files.txtC
A A
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  ©¥<EFBFBD>û2  ™ªÇŸô2„ ?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  Á÷<EFBFBD>׆3  ™ªÇŸô2„
<EFBFBD> <EFBFBD>
/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/arm64-v8a/android_gradle_build.json  ©¥<EFBFBD>û2 œªÇŸô2Š /Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/arm64-v8a/android_gradle_build.json  Á÷<EFBFBD>׆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 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 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> <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| š ¥ªÇŸô2|
z 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 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 /Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/armeabi-v7a/additional_project_files.txtC
A A
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  º¥<EFBFBD>û2  £¼ÇŸô2‡ ?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  Ü÷<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 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 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~ ¤ ¥¼ÇŸô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> <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 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 |/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86/additional_project_files.txtC
A A
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  Ã¥<EFBFBD>û2  µÂÇŸô2} ?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  é÷<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 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 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 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 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> <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 ü ¹ÂÇŸô2v
t t
r/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86/prefab_config.json  Ã¥<EFBFBD>û2  ( ¹ÂÇŸô2{ r/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86/prefab_config.json  é÷<EFBFBD>׆3  ( ¹ÂÇŸô2{
y y
w/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86/symbol_folder_index.txt  Ã¥<EFBFBD>û2  n ¹ÂÇŸô2c w/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86/symbol_folder_index.txt  é÷<EFBFBD>׆3  n ¹ÂÇŸô2c
a a
_/Users/venbateam/Documents/flutter/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt  Ã¥<EFBFBD>û2 ¤ òÑÞ€á2 _/Users/venbateam/Documents/flutter/packages/flutter_tools/gradle/src/main/groovy/CMakeLists.txt  é÷<EFBFBD>׆3 ¤ òÑÞ€á2

View File

@ -2,27 +2,27 @@ C/C++ Structured Log
<EFBFBD> <EFBFBD>
/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86_64/additional_project_files.txtC /Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86_64/additional_project_files.txtC
A A
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  Ê¥<EFBFBD>û2  ·ÆÇŸô2€ ?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  ð÷<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 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 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 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 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  ¹ÆÇŸô2y
w w
u/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86_64/prefab_config.json  Ê¥<EFBFBD>û2  ( ¹ÆÇŸô2~ u/Users/venbateam/Documents/UAE_Stats/FCSC/frontend/android/app/.cxx/RelWithDebInfo/574gs2w4/x86_64/prefab_config.json  ð÷<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 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 - Flutter
- app_settings (5.1.1): - app_settings (5.1.1):
- Flutter - 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): - appsflyer_sdk (6.16.2):
- AppsFlyerFramework (= 6.16.2) - AppsFlyerFramework (= 6.16.2)
- Flutter - Flutter
@ -53,9 +63,19 @@ PODS:
- FlutterMacOS - FlutterMacOS
- fluttertoast (0.0.2): - fluttertoast (0.0.2):
- Flutter - Flutter
- google_sign_in_ios (0.0.1):
- Flutter
- FlutterMacOS
- GoogleSignIn (~> 9.0)
- GTMSessionFetcher (>= 3.4.0)
- GoogleDataTransport (10.1.0): - GoogleDataTransport (10.1.0):
- nanopb (~> 3.30910.0) - nanopb (~> 3.30910.0)
- PromisesObjC (~> 2.4) - 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/AppDelegateSwizzler (8.0.2):
- GoogleUtilities/Environment - GoogleUtilities/Environment
- GoogleUtilities/Logger - GoogleUtilities/Logger
@ -80,6 +100,14 @@ PODS:
- GoogleUtilities/UserDefaults (8.0.2): - GoogleUtilities/UserDefaults (8.0.2):
- GoogleUtilities/Logger - GoogleUtilities/Logger
- GoogleUtilities/Privacy - 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): - image_picker_ios (0.0.1):
- Flutter - Flutter
- nanopb (3.30910.0): - nanopb (3.30910.0):
@ -119,6 +147,7 @@ DEPENDENCIES:
- flutter_native_splash (from `.symlinks/plugins/flutter_native_splash/ios`) - flutter_native_splash (from `.symlinks/plugins/flutter_native_splash/ios`)
- flutter_secure_storage_darwin (from `.symlinks/plugins/flutter_secure_storage_darwin/darwin`) - flutter_secure_storage_darwin (from `.symlinks/plugins/flutter_secure_storage_darwin/darwin`)
- fluttertoast (from `.symlinks/plugins/fluttertoast/ios`) - 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`) - image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`)
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`) - package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
- path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
@ -130,6 +159,8 @@ DEPENDENCIES:
SPEC REPOS: SPEC REPOS:
trunk: trunk:
- AppAuth
- AppCheckCore
- AppsFlyerFramework - AppsFlyerFramework
- Firebase - Firebase
- FirebaseCore - FirebaseCore
@ -137,7 +168,10 @@ SPEC REPOS:
- FirebaseInstallations - FirebaseInstallations
- FirebaseMessaging - FirebaseMessaging
- GoogleDataTransport - GoogleDataTransport
- GoogleSignIn
- GoogleUtilities - GoogleUtilities
- GTMAppAuth
- GTMSessionFetcher
- nanopb - nanopb
- PromisesObjC - PromisesObjC
@ -164,6 +198,8 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/flutter_secure_storage_darwin/darwin" :path: ".symlinks/plugins/flutter_secure_storage_darwin/darwin"
fluttertoast: fluttertoast:
:path: ".symlinks/plugins/fluttertoast/ios" :path: ".symlinks/plugins/fluttertoast/ios"
google_sign_in_ios:
:path: ".symlinks/plugins/google_sign_in_ios/darwin"
image_picker_ios: image_picker_ios:
:path: ".symlinks/plugins/image_picker_ios/ios" :path: ".symlinks/plugins/image_picker_ios/ios"
package_info_plus: package_info_plus:
@ -184,6 +220,8 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS: SPEC CHECKSUMS:
app_links: 76b66b60cc809390ca1ad69bfd66b998d2387ac7 app_links: 76b66b60cc809390ca1ad69bfd66b998d2387ac7
app_settings: 5127ae0678de1dcc19f2293271c51d37c89428b2 app_settings: 5127ae0678de1dcc19f2293271c51d37c89428b2
AppAuth: 1c1a8afa7e12f2ec3a294d9882dfa5ab7d3cb063
AppCheckCore: cc8fd0a3a230ddd401f326489c99990b013f0c4f
appsflyer_sdk: ebe94dc3f00b07bdd001251dbc87879bda3c494a appsflyer_sdk: ebe94dc3f00b07bdd001251dbc87879bda3c494a
AppsFlyerFramework: fe5303bffcdfd941d5f570c2d21eaaea982e7bdc AppsFlyerFramework: fe5303bffcdfd941d5f570c2d21eaaea982e7bdc
connectivity_plus: cb623214f4e1f6ef8fe7403d580fdad517d2f7dd connectivity_plus: cb623214f4e1f6ef8fe7403d580fdad517d2f7dd
@ -199,8 +237,12 @@ SPEC CHECKSUMS:
flutter_native_splash: 6cad9122ea0fad137d23137dd14b937f3e90b145 flutter_native_splash: 6cad9122ea0fad137d23137dd14b937f3e90b145
flutter_secure_storage_darwin: ce237a8775b39723566dc72571190a3769d70468 flutter_secure_storage_darwin: ce237a8775b39723566dc72571190a3769d70468
fluttertoast: 2c67e14dce98bbdb200df9e1acf610d7a6264ea1 fluttertoast: 2c67e14dce98bbdb200df9e1acf610d7a6264ea1
google_sign_in_ios: 205742c688aea0e64db9da03c33121694a365109
GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7 GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7
GoogleSignIn: c7f09cfbc85a1abf69187be091997c317cc33b77
GoogleUtilities: 26a3abef001b6533cf678d3eb38fd3f614b7872d GoogleUtilities: 26a3abef001b6533cf678d3eb38fd3f614b7872d
GTMAppAuth: 217a876b249c3c585a54fd6f73e6b58c4f5c4238
GTMSessionFetcher: 5aea5ba6bd522a239e236100971f10cb71b96ab6
image_picker_ios: 7fe1ff8e34c1790d6fff70a32484959f563a928a image_picker_ios: 7fe1ff8e34c1790d6fff70a32484959f563a928a
nanopb: fad817b59e0457d11a5dfbde799381cd727c1275 nanopb: fad817b59e0457d11a5dfbde799381cd727c1275
package_info_plus: af8e2ca6888548050f16fa2f1938db7b5a5df499 package_info_plus: af8e2ca6888548050f16fa2f1938db7b5a5df499

View File

@ -322,14 +322,10 @@
inputFileListPaths = ( inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
); );
inputPaths = (
);
name = "[CP] Embed Pods Frameworks"; name = "[CP] Embed Pods Frameworks";
outputFileListPaths = ( outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
); );
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh; shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
@ -358,14 +354,10 @@
inputFileListPaths = ( inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist",
); );
inputPaths = (
);
name = "[CP] Copy Pods Resources"; name = "[CP] Copy Pods Resources";
outputFileListPaths = ( outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist",
); );
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0; runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh; shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";

View File

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

View File

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

View File

@ -1,4 +1,5 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:uae_stat/config/theme/app_theme.dart'; import 'package:uae_stat/config/theme/app_theme.dart';
class ThemeSelectorDialog extends StatefulWidget { class ThemeSelectorDialog extends StatefulWidget {
@ -11,12 +12,28 @@ class ThemeSelectorDialog extends StatefulWidget {
} }
class _ThemeSelectorDialogState extends State<ThemeSelectorDialog> { class _ThemeSelectorDialogState extends State<ThemeSelectorDialog> {
late AppTheme _selectedTheme; AppTheme? _selectedTheme;
@override @override
void initState() { void initState() {
super.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 @override
@ -26,12 +43,21 @@ class _ThemeSelectorDialogState extends State<ThemeSelectorDialog> {
content: Column( content: Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
children: AppTheme.values.map((theme) { children: AppTheme.values.map((theme) {
print("THEME_DIAL1- $theme");
return RadioListTile<AppTheme>( return RadioListTile<AppTheme>(
title: Text(theme.name[0].toUpperCase() + theme.name.substring(1)), title:
Text(theme.name[0].toUpperCase() + theme.name.substring(1)),
value: theme, value: theme,
groupValue: _selectedTheme, groupValue: _selectedTheme,
onChanged: (value) => setState(() => _selectedTheme = value!), 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(), }).toList(),
), ),
actions: [ actions: [

View File

@ -31,7 +31,7 @@ class SessionEntity {
SessionFreshness get freshness { SessionFreshness get freshness {
final now = DateTime.now(); final now = DateTime.now();
if (now.isAfter(expiresOn)) return SessionFreshness.expired; 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.stale;
} }
return SessionFreshness.fresh; return SessionFreshness.fresh;

View File

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

View File

@ -69,6 +69,21 @@ class AuthUseCase extends _$AuthUseCase {
return session; // Return the session with user details. 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 { Future<void> logout() async {
await _repo.logout(); await _repo.logout();
state = const AsyncData(null); state = const AsyncData(null);

View File

@ -53,6 +53,7 @@ class PAuthRepo implements TAuthRepo {
email, email,
pw, pw,
); );
print('googleAuth $user');
} on ClientException catch (err) { } on ClientException catch (err) {
final message = err.response['message']; final message = err.response['message'];
final isWrongEmailPw = message == 'Failed to authenticate.'; final isWrongEmailPw = message == 'Failed to authenticate.';
@ -66,6 +67,30 @@ class PAuthRepo implements TAuthRepo {
return se; 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 @override
Future<void> logout() { Future<void> logout() {
PocketBaseService.authStore.clear(); 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/my_toggle.dart';
import 'package:uae_stat/presentation/components/space.dart'; import 'package:uae_stat/presentation/components/space.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.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'; import 'package:uae_stat/config/my_theme.dart';
class CreateNewPw extends ConsumerStatefulWidget { class CreateNewPw extends ConsumerStatefulWidget {
@ -184,8 +184,8 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
fontFamily: context.translate( fontFamily: context.translate(
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi',
) )),
),), ),
), ),
); );
@ -203,14 +203,14 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
}); });
ScaffoldMessenger.of(context).showSnackBar( ScaffoldMessenger.of(context).showSnackBar(
SnackBar( SnackBar(
content: content: Text(
Text(AppLocalizations.of(context)!.your_old_password_incorrect, AppLocalizations.of(context)!.your_old_password_incorrect,
style: TextStyle( style: TextStyle(
fontFamily: context.translate( fontFamily: context.translate(
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi',
) )),
),), ),
backgroundColor: Colors.red, backgroundColor: Colors.red,
), ),
); );
@ -222,13 +222,14 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
}); });
ScaffoldMessenger.of(context).showSnackBar( ScaffoldMessenger.of(context).showSnackBar(
SnackBar( SnackBar(
content: Text(context.translate('Failed to update password: $e','فشل في تحديث كلمة المرور'), content: Text(
context.translate(
'Failed to update password: $e', 'فشل في تحديث كلمة المرور'),
style: TextStyle( style: TextStyle(
fontFamily: context.translate( fontFamily: context.translate(
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi',
) )),
),
), ),
backgroundColor: Colors.red, backgroundColor: Colors.red,
), ),
@ -256,9 +257,9 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
}); });
// final themeMode = ref.read(themeProvider); // final themeMode = ref.read(themeProvider);
final themeMode = ThemeMode.dark; // final themeMode = ThemeMode.dark;
final isDarkTheme = themeMode == ThemeMode.dark || final isDarkTheme = ref.read(themeProvider) == ThemeMode.dark ||
(themeMode == ThemeMode.system && (ref.read(themeProvider) == ThemeMode.system &&
MediaQuery.of(context).platformBrightness == Brightness.dark); MediaQuery.of(context).platformBrightness == Brightness.dark);
return PopScope( return PopScope(
@ -273,7 +274,8 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
SingleChildScrollView( SingleChildScrollView(
child: SafeArea( child: SafeArea(
child: _isPasswordUpdated child: _isPasswordUpdated
? _buildSuccessContent(screenHeight, screenWidth) ? _buildSuccessContent(
screenHeight, screenWidth, isDarkTheme)
: _buildPasswordForm(ref, screenHeight, screenWidth), : _buildPasswordForm(ref, screenHeight, screenWidth),
), ),
), ),
@ -297,12 +299,9 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
], ],
), ),
) )
])) ])));
);
} }
Widget _buildPasswordForm( Widget _buildPasswordForm(
WidgetRef ref, double screenHeight, double screenWidth) { WidgetRef ref, double screenHeight, double screenWidth) {
final passwordLocale = ref.watch(localeProvider); final passwordLocale = ref.watch(localeProvider);
@ -310,6 +309,7 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
final isDarkTheme = themeMode == ThemeMode.dark || final isDarkTheme = themeMode == ThemeMode.dark ||
(themeMode == ThemeMode.system && (themeMode == ThemeMode.system &&
MediaQuery.of(context).platformBrightness == Brightness.dark); MediaQuery.of(context).platformBrightness == Brightness.dark);
return Form( return Form(
key: _formKey, key: _formKey,
child: Padding( child: Padding(
@ -334,7 +334,9 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
// Icons.close, // Icons.close,
Icons.arrow_back_ios, Icons.arrow_back_ios,
size: 24, // Icon size size: 24, // Icon size
color: isDarkTheme ? Colors.white : Colors.black, // Icon color color: isDarkTheme
? Colors.white
: Colors.black, // Icon color
), ),
), ),
), // Left icon ), // Left icon
@ -375,7 +377,7 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
), ),
fontSize: passwordLocale?.languageCode == 'ar' ? 24 : 26, fontSize: passwordLocale?.languageCode == 'ar' ? 24 : 26,
fontWeight: FontWeight.w300, fontWeight: FontWeight.w300,
color: isDarkTheme ? Colors.white : null, color: isDarkTheme ? Colors.white : Colors.black,
), ),
), ),
SizedBox(height: 10), SizedBox(height: 10),
@ -428,7 +430,8 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
fontFamily: context.translate( fontFamily: context.translate(
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi',
),), ),
),
prefixIconConstraints: const BoxConstraints( prefixIconConstraints: const BoxConstraints(
maxWidth: 25 + 16 + 10, maxWidth: 25 + 16 + 10,
maxHeight: 25 + (8 * 2), maxHeight: 25 + (8 * 2),
@ -439,11 +442,16 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
end: 10, end: 10,
), ),
child: Image.asset( child: Image.asset(
isDarkTheme ? MiscIconAssetPath.lockDark : MiscIconAssetPath.lockLight, isDarkTheme
? MiscIconAssetPath.lockDark
: MiscIconAssetPath.lockLight,
fit: BoxFit.fitHeight, fit: BoxFit.fitHeight,
height: 25, height: 25,
width: 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( suffixIcon: IconButton(
@ -460,7 +468,7 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
: MiscIconAssetPath.visibleOn, : MiscIconAssetPath.visibleOn,
color: Color( color: Color(
0xFF9EA2A9, 0xFFB68A34,
), // Apply color if needed, but keep in mind `Image.asset` might not support color directly. ), // Apply color if needed, but keep in mind `Image.asset` might not support color directly.
width: 24, width: 24,
height: 24, height: 24,
@ -475,8 +483,9 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
enabledBorder: OutlineInputBorder( enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
borderSide: BorderSide( borderSide: BorderSide(
color: color: Color(0xFFB68A34),
MyTheme.topicColor(IndicatorTopic.economy).shade400, // color:
// MyTheme.topicColor(IndicatorTopic.economy).shade400,
width: 1), width: 1),
), ),
focusedBorder: OutlineInputBorder( focusedBorder: OutlineInputBorder(
@ -512,7 +521,8 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
fontFamily: context.translate( fontFamily: context.translate(
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi',
),), ),
),
prefixIconConstraints: const BoxConstraints( prefixIconConstraints: const BoxConstraints(
maxWidth: 25 + 16 + 10, maxWidth: 25 + 16 + 10,
maxHeight: 25 + (8 * 2), maxHeight: 25 + (8 * 2),
@ -527,7 +537,8 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
fit: BoxFit.fitHeight, fit: BoxFit.fitHeight,
height: 25, height: 25,
width: 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 _obscureNewPassword
? MiscIconAssetPath.visibilityOff ? MiscIconAssetPath.visibilityOff
: MiscIconAssetPath.visibleOn, : MiscIconAssetPath.visibleOn,
color: Color(0xFFB68A34),
color: Color( // color: Color(
0xFF9EA2A9), // Apply color if needed, but keep in mind `Image.asset` might not support color directly. // 0xFF9EA2A9), // Apply color if needed, but keep in mind `Image.asset` might not support color directly.
width: 24, width: 24,
height: 24, height: 24,
), ),
@ -559,8 +570,9 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
enabledBorder: OutlineInputBorder( enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
borderSide: BorderSide( borderSide: BorderSide(
color: color: Color(0xFFB68A34),
MyTheme.topicColor(IndicatorTopic.economy).shade400, // color:
// MyTheme.topicColor(IndicatorTopic.economy).shade400,
width: 1), width: 1),
), ),
focusedBorder: OutlineInputBorder( focusedBorder: OutlineInputBorder(
@ -594,7 +606,8 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
fontFamily: context.translate( fontFamily: context.translate(
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi',
),), ),
),
prefixIconConstraints: const BoxConstraints( prefixIconConstraints: const BoxConstraints(
maxWidth: 25 + 16 + 10, maxWidth: 25 + 16 + 10,
maxHeight: 25 + (8 * 2), maxHeight: 25 + (8 * 2),
@ -609,7 +622,8 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
fit: BoxFit.fitHeight, fit: BoxFit.fitHeight,
height: 25, height: 25,
width: 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 _obscureConfirmPassword
? MiscIconAssetPath.visibilityOff ? MiscIconAssetPath.visibilityOff
: MiscIconAssetPath.visibleOn, : MiscIconAssetPath.visibleOn,
color: Color(0xFFB68A34),
color: Color( // color: Color(
0xFF9EA2A9), // Apply color if needed, but keep in mind `Image.asset` might not support color directly. // 0xFF9EA2A9), // Apply color if needed, but keep in mind `Image.asset` might not support color directly.
width: 24, width: 24,
height: 24, height: 24,
), ),
@ -641,8 +655,9 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
enabledBorder: OutlineInputBorder( enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
borderSide: BorderSide( borderSide: BorderSide(
color: color: Color(0xFFB68A34),
MyTheme.topicColor(IndicatorTopic.economy).shade400, // color:
// MyTheme.topicColor(IndicatorTopic.economy).shade400,
width: 1), width: 1),
), ),
focusedBorder: OutlineInputBorder( focusedBorder: OutlineInputBorder(
@ -681,7 +696,8 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
} }
}, },
style: ElevatedButton.styleFrom( style: ElevatedButton.styleFrom(
backgroundColor: Colors.brown[300], backgroundColor: Color(0xFFB68A34),
// backgroundColor: Colors.brown[300],
padding: EdgeInsets.symmetric(horizontal: 80, vertical: 16), padding: EdgeInsets.symmetric(horizontal: 80, vertical: 16),
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
@ -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'); print('IN');
return Padding( return Padding(
padding: EdgeInsets.all(20.0), padding: EdgeInsets.all(20.0),
@ -753,7 +770,7 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
), ),
fontSize: 16, fontSize: 16,
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
color: Color(0xFF414042), color: isDarkTheme ? Colors.white : Color(0xFF414042),
), ),
), ),
SizedBox(height: 20), SizedBox(height: 20),
@ -779,7 +796,8 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
), ),
), ),
backgroundColor: WidgetStatePropertyAll( backgroundColor: WidgetStatePropertyAll(
MyTheme.topicColor(IndicatorTopic.social), Color(0xFFB68A34),
// MyTheme.topicColor(IndicatorTopic.social),
), ),
// surfaceTintColor: MaterialStatePropertyAll( // surfaceTintColor: MaterialStatePropertyAll(
// MyTheme.economy[800], // MyTheme.economy[800],

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/infrastructure/services/img_asset_paths/icons/misc_icon_asset_path.dart';
import 'package:uae_stat/presentation/Screens/profilepage.dart'; import 'package:uae_stat/presentation/Screens/profilepage.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.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/indicators/locale_provider.dart';
import 'package:uae_stat/presentation/components/my_toggle.dart'; import 'package:uae_stat/presentation/components/my_toggle.dart';
@ -293,8 +294,7 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
fontFamily: context.translate( fontFamily: context.translate(
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi',
) )),
),
), ),
content: Text( content: Text(
context.translate( context.translate(
@ -304,8 +304,7 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
fontFamily: context.translate( fontFamily: context.translate(
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi',
) )),
),
), ),
actions: [ actions: [
TextButton( TextButton(
@ -327,10 +326,14 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
), ),
child: Text( child: Text(
context.translate('Ok', 'حسنًا'), context.translate('Ok', 'حسنًا'),
style: TextStyle(color: Colors.white, fontSize: 16, fontFamily: context.translate( style: TextStyle(
color: Colors.white,
fontSize: 16,
fontFamily: context.translate(
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi',
),), ),
),
), ),
), ),
], ],
@ -360,8 +363,6 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
} }
} }
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
double screenheight = MediaQuery.of(context).size.height; double screenheight = MediaQuery.of(context).size.height;
@ -456,13 +457,20 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
Column(children: [ Column(children: [
registrationSuccess registrationSuccess
? Padding( ? 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( child: Column(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
SizedBox(height: screenheight / 4), SizedBox(height: screenheight / 4),
buildIconContainer( buildIconContainer(Icons.check_circle_rounded,
Icons.check_circle_rounded, Color(0xFF7DAFBC)), Color(0xFFB68A34)
// Color(0xFF7DAFBC)
),
SizedBox(height: 20), SizedBox(height: 20),
Text( Text(
context.translate( context.translate(
@ -476,8 +484,9 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
), ),
fontSize: 16, fontSize: 16,
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
color: isDarkTheme ? Color(0xFFFFFFFF) : Color(0xFF414042) color: isDarkTheme
), ? Color(0xFFFFFFFF)
: Color(0xFF414042)),
), ),
SizedBox(height: 10), SizedBox(height: 10),
Text( Text(
@ -491,14 +500,21 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
'NotoKufi', 'NotoKufi',
), ),
fontSize: 14, fontSize: 14,
color: isDarkTheme ? Color(0xFFFFFFFF) : Color(0xFF898C81), color: isDarkTheme
? Color(0xFFFFFFFF)
: Color(0xFF898C81),
), ),
), ),
SizedBox(height: 10), SizedBox(height: 10),
ElevatedButton( ElevatedButton(
onPressed: () => {context.go('/login')}, onPressed: () => {context.go('/login')},
style: ElevatedButton.styleFrom( style: ElevatedButton.styleFrom(
backgroundColor: isDarkTheme ? Color(0xFF24B4FB) : Color(0xFFAA8E83), // Background color backgroundColor: Color(0xFFB68A34),
// isDarkTheme
// ? Color(0xFF24B4FB)
// : Color(
// 0xFFAA8E83), // Background color
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular( borderRadius: BorderRadius.circular(
12), // Border radius 12), // Border radius
@ -520,14 +536,14 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
Center( Center(
child: Container( child: Container(
height: screenheight / 16, height: screenheight / 16,
width: screenwidth / 2.5, // width: screenwidth / 2.5,
decoration: BoxDecoration( decoration: BoxDecoration(
image: DecorationImage( image: DecorationImage(
image: AssetImage( image: AssetImage(isDarkTheme
isDarkTheme
? BannerAssetPath.fcscLogoDark ? BannerAssetPath.fcscLogoDark
: BannerAssetPath.fcscLogoLight), // Background image asset : BannerAssetPath
fit: BoxFit.fill, .fcscLogoLight), // Background image asset
// fit: BoxFit.fill,
), ),
), ),
)) ))
@ -556,7 +572,9 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
), ),
fontSize: 16, fontSize: 16,
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
color: isDarkTheme ? Color(0xFFFFFFFF) : Color(0xFF414042)), color: isDarkTheme
? Color(0xFFFFFFFF)
: Color(0xFF414042)),
), ),
SizedBox(height: 10), SizedBox(height: 10),
Text( Text(
@ -570,7 +588,9 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
'NotoKufi', 'NotoKufi',
), ),
fontSize: 14, fontSize: 14,
color: isDarkTheme ? Color(0xFFEEEEEE) : Color(0xFF898C81), color: isDarkTheme
? Color(0xFFEEEEEE)
: Color(0xFF898C81),
), ),
), ),
SizedBox(height: 10), SizedBox(height: 10),
@ -594,7 +614,11 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi',
), ),
color: isDarkTheme ? Color(0xFF24B4FB) : Color(0xFFAA8E83), color: Color(0xFFB68A34),
// color: isDarkTheme
// ? Color(0xFF24B4FB)
// : Color(0xFFAA8E83),
), ),
), ),
), ),
@ -602,14 +626,14 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
Center( Center(
child: Container( child: Container(
height: screenheight / 16, height: screenheight / 16,
width: screenwidth / 2.5, // width: screenwidth / 2.5,
decoration: BoxDecoration( decoration: BoxDecoration(
image: DecorationImage( image: DecorationImage(
image: AssetImage( image: AssetImage(isDarkTheme
isDarkTheme
? BannerAssetPath.fcscLogoDark ? BannerAssetPath.fcscLogoDark
: BannerAssetPath.fcscLogoLight), // Background image asset : BannerAssetPath
fit: BoxFit.fill, .fcscLogoLight), // Background image asset
// fit: BoxFit.fill,
), ),
), ),
)) ))
@ -620,8 +644,8 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
key: _formKey, key: _formKey,
child: SingleChildScrollView( child: SingleChildScrollView(
child: Column( child: Column(
mainAxisAlignment: // mainAxisAlignment:
MainAxisAlignment.center, // MainAxisAlignment.center,
children: [ children: [
SizedBox(height: screenheight / 60), SizedBox(height: screenheight / 60),
Text( Text(
@ -635,7 +659,9 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
), ),
fontSize: 32, fontSize: 32,
fontWeight: FontWeight.w400, fontWeight: FontWeight.w400,
color: isDarkTheme ? Color(0xFFFFFFFF) : Color(0xFF000000), color: isDarkTheme
? Color(0xFFFFFFFF)
: Color(0xFF000000),
), ),
), ),
SizedBox(height: 10), SizedBox(height: 10),
@ -649,12 +675,14 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
), ),
fontSize: fontSize:
context.translate(18.0, 14.0), context.translate(18.0, 14.0),
color: isDarkTheme ? Color(0xFFFFFFFF) : Color(0xFF898C81), color: isDarkTheme
? Color(0xFFFFFFFF)
: Color(0xFF898C81),
fontWeight: FontWeight.w600, fontWeight: FontWeight.w600,
), ),
), ),
SizedBox(height: 20), SizedBox(height: 15),
// Display this if registration is pending approval // Display this if registration is pending approval
Padding( Padding(
padding: const EdgeInsets.only( padding: const EdgeInsets.only(
@ -667,9 +695,13 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
// focusNode: _focusNodes[0], // focusNode: _focusNodes[0],
decoration: InputDecoration( decoration: InputDecoration(
filled: true, filled: true,
fillColor: isDarkTheme ? const Color(0xFF000000) : Colors.white, fillColor: isDarkTheme
? const Color(0xFF000000)
: Colors.white,
errorStyle: TextStyle( errorStyle: TextStyle(
color: isDarkTheme ? Color(0xFFFFA200) : Color(0xFFb22222), color: isDarkTheme
? Color(0xFFFFA200)
: Color(0xFFb22222),
fontFamily: context.translate( fontFamily: context.translate(
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi',
@ -711,7 +743,8 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
borderRadius: borderRadius:
BorderRadius.circular(10), BorderRadius.circular(10),
borderSide: BorderSide( borderSide: BorderSide(
color: Color(0xFFB68A34), // border color: Color(
0xFFB68A34), // border
width: 1), // Enabled border width: 1), // Enabled border
), ),
focusedBorder: OutlineInputBorder( focusedBorder: OutlineInputBorder(
@ -770,9 +803,13 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
// focusNode: _focusNodes[1], // focusNode: _focusNodes[1],
decoration: InputDecoration( decoration: InputDecoration(
filled: true, filled: true,
fillColor: isDarkTheme ? const Color(0xFF000000) : Colors.white, fillColor: isDarkTheme
? const Color(0xFF000000)
: Colors.white,
errorStyle: TextStyle( errorStyle: TextStyle(
color: isDarkTheme ? Color(0xFFFFA200) : Color(0xFFb22222), color: isDarkTheme
? Color(0xFFFFA200)
: Color(0xFFb22222),
fontFamily: context.translate( fontFamily: context.translate(
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi',
@ -873,9 +910,13 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
obscureText: _obscurePassword, obscureText: _obscurePassword,
decoration: InputDecoration( decoration: InputDecoration(
filled: true, filled: true,
fillColor: isDarkTheme ? const Color(0xFF000000) : Colors.white, fillColor: isDarkTheme
? const Color(0xFF000000)
: Colors.white,
errorStyle: TextStyle( errorStyle: TextStyle(
color: isDarkTheme ? Color(0xFFFFA200) : Color(0xFFb22222), color: isDarkTheme
? Color(0xFFFFA200)
: Color(0xFFb22222),
fontFamily: context.translate( fontFamily: context.translate(
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi',
@ -991,7 +1032,7 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
MaxLengthEnforcement.enforced, MaxLengthEnforcement.enforced,
), ),
), ),
SizedBox(height: 15), SizedBox(height: 10),
Padding( Padding(
padding: const EdgeInsets.only( padding: const EdgeInsets.only(
top: 5.0, top: 5.0,
@ -1006,9 +1047,13 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
_obscureConfirmPassword, _obscureConfirmPassword,
decoration: InputDecoration( decoration: InputDecoration(
filled: true, filled: true,
fillColor: isDarkTheme ? const Color(0xFF000000) : Colors.white, fillColor: isDarkTheme
? const Color(0xFF000000)
: Colors.white,
errorStyle: TextStyle( errorStyle: TextStyle(
color: isDarkTheme ? Color(0xFFFFA200) : Color(0xFFb22222), color: isDarkTheme
? Color(0xFFFFA200)
: Color(0xFFb22222),
fontFamily: context.translate( fontFamily: context.translate(
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi',
@ -1159,7 +1204,8 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
.agree, .agree,
// text: 'I agree to ', // text: 'I agree to ',
style: TextStyle( style: TextStyle(
fontFamily: context.translate( fontFamily:
context.translate(
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi',
), ),
@ -1170,7 +1216,10 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
'ar' 'ar'
? 12 ? 12
: 14, : 14,
color: isDarkTheme ? Color(0xFFFFFFFF) : Color(0xFF898C81), // Change to your desired color color: isDarkTheme
? Color(0xFFFFFFFF)
: Color(
0xFF898C81), // Change to your desired color
), ),
children: [ children: [
TextSpan( TextSpan(
@ -1184,7 +1233,8 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
.terms_conditions, .terms_conditions,
// text: 'Terms & Conditions', // text: 'Terms & Conditions',
style: TextStyle( style: TextStyle(
fontFamily: context.translate( fontFamily: context
.translate(
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi',
), ),
@ -1197,7 +1247,11 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
fontWeight: fontWeight:
FontWeight FontWeight
.bold, .bold,
color:isDarkTheme ? Color(0xFFB68A35) : Color(0xFF985400), color: isDarkTheme
? Color(
0xFFB68A35)
: Color(
0xFF985400),
// Makes the text bold // Makes the text bold
// decoration: // decoration:
// TextDecoration.underline, // TextDecoration.underline,
@ -1212,11 +1266,16 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
.of(context)! .of(context)!
.t_and, .t_and,
style: TextStyle( style: TextStyle(
fontFamily: context.translate( fontFamily: context
.translate(
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi',
), ),
color: isDarkTheme ? Color(0xFFFFFFFF) : Color(0xFF898C81), color: isDarkTheme
? Color(
0xFFFFFFFF)
: Color(
0xFF898C81),
), ),
), ),
TextSpan( TextSpan(
@ -1229,7 +1288,8 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
.of(context)! .of(context)!
.privacy_policy, .privacy_policy,
style: TextStyle( style: TextStyle(
fontFamily: context.translate( fontFamily: context
.translate(
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi',
), ),
@ -1242,7 +1302,11 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
'ar' 'ar'
? 12 ? 12
: 14, : 14,
color: isDarkTheme ? Color(0xFFB68A35) : Color(0xFF985400), color: isDarkTheme
? Color(
0xFFB68A35)
: Color(
0xFF985400),
// decoration: // decoration:
// TextDecoration.underline, // TextDecoration.underline,
decorationColor: decorationColor:
@ -1256,7 +1320,8 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
.of(context)! .of(context)!
.conditions, .conditions,
style: TextStyle( style: TextStyle(
fontFamily: context.translate( fontFamily: context
.translate(
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi',
), ),
@ -1267,7 +1332,11 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
'ar' 'ar'
? 12 ? 12
: 14, : 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( context.translate(
'Required', 'مطلوب'), 'Required', 'مطلوب'),
style: TextStyle( style: TextStyle(
fontFamily: context.translate( fontFamily:
context.translate(
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi',
), ),
@ -1329,7 +1399,8 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
? null ? null
: _registerUser, : _registerUser,
style: ElevatedButton.styleFrom( style: ElevatedButton.styleFrom(
backgroundColor: Color(0xFFB68A34), // Brownish color for Register backgroundColor: Color(
0xFFB68A34), // Brownish color for Register
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
borderRadius: borderRadius:
BorderRadius.circular(10), BorderRadius.circular(10),
@ -1344,76 +1415,8 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
context)! context)!
.register_title, .register_title,
style: TextStyle( style: TextStyle(
fontFamily: context.translate( fontFamily:
'Roboto', context.translate(
'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(
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi',
), ),
@ -1428,17 +1431,94 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
Icon( Icon(
Icons Icons
.chevron_right_outlined, .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( SizedBox(
height: 10, height: 10,
), ),
Center( Padding(
padding: const EdgeInsets.all(20.0),
// child: Container( // child: Container(
// height: screenheight / 16, // height: screenheight / 16,
// width: screenwidth / 3, // width: screenwidth / 3,
@ -1452,9 +1532,9 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
// ) // )
child: fcscBanner, child: fcscBanner,
), ),
SizedBox( // SizedBox(
height: 20, // height: 5,
), // ),
], ],
), ),
), ),

View File

@ -5,6 +5,7 @@ import 'package:external_repos/external_repos.dart';
import 'package:flutter/gestures.dart'; import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:http/http.dart' as http; 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/components/my_toggle.dart';
import 'package:uae_stat/presentation/routes/bottom_bar_routes/tab_routes/home_route.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:flutter_gen/gen_l10n/app_localizations.dart';
// import 'package:uae_stat/l10n/app_localizations.dart';
import '../components/my_bottom_nav_bar.dart'; import '../components/my_bottom_nav_bar.dart';
import 'auth_verification/changepassword.dart'; import 'auth_verification/changepassword.dart';
import 'demo_home.dart'; import 'demo_home.dart';
@ -71,14 +72,17 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
// Date format for the display // Date format for the display
final DateFormat _dateFormat = DateFormat('yyyy-MM-dd'); final DateFormat _dateFormat = DateFormat('yyyy-MM-dd');
final List<String> _countries = [ // final List<String> _countries = [
'United Arab Emirates', // 'United Arab Emirates',
'United States', // 'United States',
'India', // 'India',
'Canada' // 'Canada'
]; // ];
final List<String> preferred_language = ['English', 'Arabic']; final List<String> preferred_language = ['English', 'Arabic'];
String? _selectedCountry; // String? _selectedCountry;
ISOCountry? _selectedCountry;
String? preferredLang;
String? _selectedLanguage; String? _selectedLanguage;
bool isChecked = false; bool isChecked = false;
bool showError = false; bool showError = false;
@ -98,6 +102,8 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
super.initState(); super.initState();
// print(widget.userId); // print(widget.userId);
_selectedCountry ??= ISOCountry.numeric784;
final themeMode = ref.read(themeProvider); final themeMode = ref.read(themeProvider);
isDarkTheme = themeMode == ThemeMode.dark || isDarkTheme = themeMode == ThemeMode.dark ||
(themeMode == ThemeMode.system && (themeMode == ThemeMode.system &&
@ -212,13 +218,15 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
}); });
} else { } else {
ScaffoldMessenger.of(context).showSnackBar( ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('Please select a JPG, JPEG, or PNG file.', SnackBar(
content: Text(
'Please select a JPG, JPEG, or PNG file.',
style: TextStyle( style: TextStyle(
fontFamily: context.translate( fontFamily: context.translate(
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi',
) )),
),)), )),
); );
} }
} }
@ -336,8 +344,13 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
// String username = 'users55538'; // String username = 'users55538';
// String email = 'surendarsuri30@gmail.com'; // String email = 'surendarsuri30@gmail.com';
String dateOfBirth = _dateController.text; // in DD/MM/YYYY format String dateOfBirth = _dateController.text; // in DD/MM/YYYY format
String countryRegion = _selectedCountry ?? ''; // String countryRegion = _selectedCountry ?? '';
String preferredLang = _selectedLanguage == 'English' ? 'en' : 'ar'; String countryRegion = context.translate(
_selectedCountry?.nameEN ?? '',
_selectedCountry?.nameAR ?? '',
);
preferredLang = _selectedLanguage == 'English' ? 'en' : 'ar';
bool termsAccepted = isChecked; bool termsAccepted = isChecked;
// Parse the date from dd/MM/yyyy format and convert to yyyy-MM-dd // Parse the date from dd/MM/yyyy format and convert to yyyy-MM-dd
@ -354,7 +367,7 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
request.fields['full_name'] = fullName; request.fields['full_name'] = fullName;
request.fields['dob'] = formattedDob; request.fields['dob'] = formattedDob;
request.fields['country_region'] = countryRegion; request.fields['country_region'] = countryRegion;
request.fields['language'] = preferredLang; request.fields['language'] = preferredLang!;
request.fields['is_profile_completed'] = 'True'; request.fields['is_profile_completed'] = 'True';
// Add the file, if available // Add the file, if available
@ -371,14 +384,15 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
// Send the request // Send the request
final response = await request.send(); final response = await request.send();
print(response); print(response);
ScaffoldMessenger.of(context).showSnackBar( ScaffoldMessenger.of(context).showSnackBar(SnackBar(
SnackBar(content: Text(AppLocalizations.of(context)!.profile_updated_successfully, content: Text(
AppLocalizations.of(context)!.profile_updated_successfully,
style: TextStyle( style: TextStyle(
fontFamily: context.translate( fontFamily: context.translate(
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi',
) )),
),))); )));
// **Set Default Locale in Provider** // **Set Default Locale in Provider**
print('_selectedLanguage $_selectedLanguage'); print('_selectedLanguage $_selectedLanguage');
preferredLang = _selectedLanguage == 'English' ? 'en' : 'ar'; preferredLang = _selectedLanguage == 'English' ? 'en' : 'ar';
@ -397,12 +411,17 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
context.go('/welcomePage'); context.go('/welcomePage');
} catch (error) { } catch (error) {
ScaffoldMessenger.of(context).showSnackBar( ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text(context.translate("Failed to update profile: $error",'$error فشل في تحديث الملف الشخصي: '),style: TextStyle( SnackBar(
content: Text(
context.translate("Failed to update profile: $error",
'$error فشل في تحديث الملف الشخصي: '),
style: TextStyle(
fontFamily: context.translate( fontFamily: context.translate(
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi',
) )),
),)),); )),
);
} }
} }
} }
@ -444,21 +463,27 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
'Logout', 'Logout',
'تسجيل الخروج', 'تسجيل الخروج',
), ),
style: style: TextStyle(
TextStyle(color: Color(0xFF898C81), fontWeight: FontWeight.w700,fontFamily: context.translate( color: Color(0xFF898C81),
fontWeight: FontWeight.w700,
fontFamily: context.translate(
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi',
),), ),
),
), ),
content: Text( content: Text(
context.translate( context.translate(
'Are you sure you want to logout?', 'Are you sure you want to logout?',
'هل أنت متأكد أنك تريد تسجيل الخروج؟', 'هل أنت متأكد أنك تريد تسجيل الخروج؟',
), ),
style: TextStyle(color: Color(0xFF898C81),fontFamily: context.translate( style: TextStyle(
color: Color(0xFF898C81),
fontFamily: context.translate(
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi',
),), ),
),
), ),
actions: [ actions: [
TextButton( TextButton(
@ -477,7 +502,8 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
'إلغاء', 'إلغاء',
), ),
style: TextStyle( style: TextStyle(
color: Color(0xFFAA8E83),fontFamily: context.translate( color: Color(0xFFAA8E83),
fontFamily: context.translate(
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi',
), // Text color ), // Text color
@ -499,7 +525,8 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
'تسجيل الخروج', 'تسجيل الخروج',
), ),
style: TextStyle( style: TextStyle(
color: Colors.white, fontFamily: context.translate( color: Colors.white,
fontFamily: context.translate(
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi',
), // Text color ), // Text color
@ -528,6 +555,15 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
(themeMode == ThemeMode.system && (themeMode == ThemeMode.system &&
MediaQuery.of(context).platformBrightness == Brightness.dark); 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( return PopScope(
canPop: false, // Allow back navigation only if not login screen canPop: false, // Allow back navigation only if not login screen
onPopInvokedWithResult: (didPop, result) { onPopInvokedWithResult: (didPop, result) {
@ -541,16 +577,23 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
elevation: 0, elevation: 0,
leading: IconButton( leading: IconButton(
icon: Icon(Icons.arrow_back_ios_new, color: Colors.black), icon: Icon(Icons.arrow_back_ios_new, color: Colors.black),
onPressed: () { onPressed: () async {
context.go('/'); final prefs = await SharedPreferences.getInstance();
await _authRepo.logout();
prefs.clear();
context.go('/login');
// context.go('/');
}, },
), ),
title: Text( title: Text(
AppLocalizations.of(context)!.my_profile, AppLocalizations.of(context)!.my_profile,
style: TextStyle(color: Color(0xFF985400),fontFamily: context.translate( style: TextStyle(
color: Color(0xFF985400),
fontFamily: context.translate(
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi',
),), ),
),
), ),
actions: [ actions: [
Consumer( Consumer(
@ -745,10 +788,13 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
Text( Text(
AppLocalizations.of(context)!.full_name, AppLocalizations.of(context)!.full_name,
style: TextStyle( style: TextStyle(
fontSize: 16, fontWeight: FontWeight.w500,fontFamily: context.translate( fontSize: 16,
fontWeight: FontWeight.w500,
fontFamily: context.translate(
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi',
),), ),
),
), ),
], ],
), ),
@ -776,8 +822,11 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
enabledBorder: OutlineInputBorder( enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
borderSide: BorderSide( borderSide: BorderSide(
color: isDarkTheme ? Colors.white : MyTheme.topicColor(IndicatorTopic.economy) color: Color(0xFFB68A34),
.shade400, // color: isDarkTheme
// ? Colors.white
// : MyTheme.topicColor(IndicatorTopic.economy)
// .shade400,
width: 1), // Enabled border width: 1), // Enabled border
), ),
hintText: _showHints[2] ? 'Enter the name' : null, hintText: _showHints[2] ? 'Enter the name' : null,
@ -791,7 +840,9 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
), ),
border: OutlineInputBorder( border: OutlineInputBorder(
borderSide: BorderSide( borderSide: BorderSide(
color: isDarkTheme ? Colors.white : Color(0xFF7296BE), color: Color(0xFFB68A34),
// color:
// isDarkTheme ? Colors.white : Color(0xFF7296BE),
), ),
borderRadius: BorderRadius.circular(8), borderRadius: BorderRadius.circular(8),
), ),
@ -811,7 +862,8 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi',
), ),
fontSize: 16, fontWeight: FontWeight.w500, fontSize: 16,
fontWeight: FontWeight.w500,
color: isDarkTheme ? Colors.white : null, color: isDarkTheme ? Colors.white : null,
), ),
), ),
@ -828,14 +880,19 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
enabledBorder: OutlineInputBorder( enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
borderSide: BorderSide( borderSide: BorderSide(
color:isDarkTheme ? Colors.white : color: Color(0xFFB68A34),
MyTheme.topicColor(IndicatorTopic.economy) // color: isDarkTheme
.shade400, // ? Colors.white
// : MyTheme.topicColor(IndicatorTopic.economy)
// .shade400,
width: 1), // Enabled border width: 1), // Enabled border
), ),
border: OutlineInputBorder( border: OutlineInputBorder(
borderSide: BorderSide( borderSide: BorderSide(
color:isDarkTheme ? Colors.white : Color(0xFF7296BE), color: Color(0xFFB68A34),
// color: isDarkTheme
// ? Colors.white
// : Color(0xFF7296BE),
), ),
borderRadius: BorderRadius.circular(8), borderRadius: BorderRadius.circular(8),
), ),
@ -846,7 +903,9 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi',
), ),
color: isDarkTheme ? Colors.white : Color(0xFFC3C6CB), color:
isDarkTheme ? Colors.white : Color(0xFFC3C6CB),
// color: Color(0xFFB68A34),
fontSize: 14, fontSize: 14,
), ),
@ -878,9 +937,9 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi',
), ),
fontSize: 16, fontWeight: FontWeight.w500, fontSize: 16,
color: isDarkTheme ? Colors.white : null fontWeight: FontWeight.w500,
), color: isDarkTheme ? Colors.white : null),
), ),
], ],
), ),
@ -890,20 +949,26 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
setState(() => _isHoveringDropdown = true), setState(() => _isHoveringDropdown = true),
onExit: (_) => onExit: (_) =>
setState(() => _isHoveringDropdown = false), setState(() => _isHoveringDropdown = false),
child: DropdownButtonFormField<String>(
child: DropdownButtonFormField<ISOCountry>(
isExpanded: true,
value: _selectedCountry, value: _selectedCountry,
decoration: InputDecoration( decoration: InputDecoration(
enabledBorder: OutlineInputBorder( enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
borderSide: BorderSide( borderSide: BorderSide(
color: isDarkTheme ? Colors.white : color: Color(0xFFB68A34),
MyTheme.topicColor(IndicatorTopic.economy) // color: Colors.red,
.shade400, // : MyTheme.topicColor(
// IndicatorTopic.economy).shade400,
width: 1), // Enabled border width: 1), // Enabled border
), ),
border: OutlineInputBorder( border: OutlineInputBorder(
borderSide: BorderSide( borderSide: BorderSide(
color: isDarkTheme ? Colors.white : Color(0xFF7296BE), color: Color(0xFFB68A34),
// color: isDarkTheme
// ? Colors.white
// : Color(0xFF7296BE),
), ),
borderRadius: BorderRadius.circular(8), borderRadius: BorderRadius.circular(8),
), ),
@ -913,25 +978,90 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
? Colors.black ? Colors.black
: Colors.grey), : Colors.grey),
items: _countries items: _countries
.map((item) => DropdownMenuItem<String>( .map((item) => DropdownMenuItem<ISOCountry>(
value: item, value: item,
child: Text(item, child: SizedBox(
width: double.infinity,
child: Text(
// item.nameEN,
context.translate(
item.nameEN, item.nameAR),
overflow: TextOverflow.ellipsis,
maxLines: 1,
style: TextStyle( style: TextStyle(
fontFamily: context.translate( fontFamily: context.translate(
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi',
), ),
color: isDarkTheme ? Colors.white : null, // color: Colors.red
),), color:
isDarkTheme ? Colors.white : null,
),
),
),
)) ))
.toList(), .toList(),
onChanged: (String? newValue) { onChanged: (ISOCountry? newValue) {
setState(() { setState(() {
_selectedCountry = newValue; _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), SizedBox(height: 10),
Row( Row(
@ -944,7 +1074,8 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi',
), ),
fontSize: 16, fontWeight: FontWeight.w500, fontSize: 16,
fontWeight: FontWeight.w500,
color: isDarkTheme ? Colors.white : null, color: isDarkTheme ? Colors.white : null,
), ),
), ),
@ -962,14 +1093,18 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
enabledBorder: OutlineInputBorder( enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(10), borderRadius: BorderRadius.circular(10),
borderSide: BorderSide( borderSide: BorderSide(
color: isDarkTheme ? Colors.white : color: Color(0xFFB68A34),
MyTheme.topicColor(IndicatorTopic.economy) // : MyTheme.topicColor(
.shade400, // IndicatorTopic.economy)
// .shade400,
width: 1), // Enabled border width: 1), // Enabled border
), ),
border: OutlineInputBorder( border: OutlineInputBorder(
borderSide: BorderSide( borderSide: BorderSide(
color: isDarkTheme ? Colors.white : Color(0xFF7296BE), color: Color(0xFFB68A34),
// color: isDarkTheme
// ? Colors.white
// : Color(0xFF7296BE),
), ),
borderRadius: BorderRadius.circular(8), borderRadius: BorderRadius.circular(8),
), ),
@ -981,14 +1116,16 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
items: preferred_language items: preferred_language
.map((item) => DropdownMenuItem<String>( .map((item) => DropdownMenuItem<String>(
value: item, value: item,
child: Text(item, child: Text(
item,
style: TextStyle( style: TextStyle(
fontFamily: context.translate( fontFamily: context.translate(
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi',
), ),
color: isDarkTheme ? Colors.white : null, color: isDarkTheme ? Colors.white : null,
),), ),
),
)) ))
.toList(), .toList(),
onChanged: (String? newValue) { onChanged: (String? newValue) {
@ -1012,9 +1149,14 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
}, },
side: BorderSide( side: BorderSide(
color: showError color: showError
? isDarkTheme ? Color(0xFFFFA200) : Color(0xFFb22222) ? isDarkTheme
: isDarkTheme ? Colors.white : Color(0xFF7296BE), ? Color(0xFFB68A34)
: Color(0xFFb22222)
: Color(0xFFB68A34),
// : isDarkTheme
// ? Colors.white
// : Color(0xFF7296BE),
width: 1, width: 1,
), ),
), ),
@ -1034,7 +1176,10 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
), ),
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
fontSize: 14, 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: [ children: [
TextSpan( TextSpan(
@ -1051,11 +1196,16 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
), ),
fontSize: 14, fontSize: 14,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
color: isDarkTheme ? Color(0xFF9EB3E4) : Color(0xFF985400), color: Color(0xFFB68A34),
// color: isDarkTheme
// ? Color(0xFF9EB3E4)
// : Color(0xFF985400),
// Makes the text bold // Makes the text bold
// decoration: // decoration:
// TextDecoration.underline, // TextDecoration.underline,
decorationColor: Color(0xFF985400), decorationColor: Color(0xFFB68A34),
// decorationColor: Color(0xFF985400),
decorationThickness: 1), decorationThickness: 1),
), ),
TextSpan( TextSpan(
@ -1065,7 +1215,9 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi',
), ),
color: isDarkTheme ? Colors.white : Color( color: isDarkTheme
? Colors.white
: Color(
0xFF898C81), // Change to your desired color 0xFF898C81), // Change to your desired color
), ),
), ),
@ -1082,10 +1234,14 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi',
), ),
color: isDarkTheme ? Color(0xFF9EB3E4) : Color(0xFF985400), color: Color(0xFFB68A34),
// color: isDarkTheme
// ? Color(0xFF9EB3E4)
// : Color(0xFF985400),
// decoration: // decoration:
// TextDecoration.underline, // TextDecoration.underline,
decorationColor: Color(0xFF648CBA), decorationColor: Color(0xFFB68A34),
decorationThickness: 1), decorationThickness: 1),
), ),
TextSpan( TextSpan(
@ -1098,7 +1254,9 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
), ),
fontWeight: FontWeight.w500, fontWeight: FontWeight.w500,
fontSize: 14, fontSize: 14,
color: isDarkTheme ? Colors.white : Color( color: isDarkTheme
? Colors.white
: Color(
0xFF898C81), // Change to your desired color 0xFF898C81), // Change to your desired color
), ),
), ),
@ -1147,7 +1305,10 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
AppLocalizations.of(context)!.change_password, AppLocalizations.of(context)!.change_password,
style: TextStyle( style: TextStyle(
// color: Color(0xFF648CBA), // color: Color(0xFF648CBA),
color: isDarkTheme ? Color(0xFF9EB3E4) : Color(0xFF985400), color: Color(0xFFB68A34),
// color: isDarkTheme
// ? Color(0xFF9EB3E4)
// : Color(0xFF985400),
fontSize: 14, fontSize: 14,
fontWeight: FontWeight.w700, fontWeight: FontWeight.w700,
fontFamily: context.translate( fontFamily: context.translate(
@ -1178,7 +1339,10 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
} }
}, },
style: ElevatedButton.styleFrom( style: ElevatedButton.styleFrom(
backgroundColor: isDarkTheme ? Color(0xFF7296BE) :Color(0xFF92722A), backgroundColor: Color(0xFFB68A34),
// backgroundColor:
// isDarkTheme ? Color(0xFF7296BE) : Color(0xFF92722A),
minimumSize: Size(double.infinity, 50), minimumSize: Size(double.infinity, 50),
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8), borderRadius: BorderRadius.circular(8),
@ -1190,10 +1354,13 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
children: [ children: [
Text( Text(
AppLocalizations.of(context)!.save, AppLocalizations.of(context)!.save,
style: TextStyle(color: Colors.white,fontFamily: context.translate( style: TextStyle(
color: Colors.white,
fontFamily: context.translate(
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi',
),), ),
),
), ),
SizedBox(width: 8), // Add space between text and icon SizedBox(width: 8), // Add space between text and icon
Image.asset( Image.asset(
@ -1258,18 +1425,20 @@ class ConfirmationDialog extends ConsumerWidget {
children: [ children: [
TextSpan( TextSpan(
text: AppLocalizations.of(context)!.name, text: AppLocalizations.of(context)!.name,
style: style: TextStyle(
TextStyle(fontWeight: FontWeight.w700,fontFamily: context.translate( fontWeight: FontWeight.w700,
fontFamily: context.translate(
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi',
),color: isDarkTheme ? Colors.white : null), // Bold for "name" ),
color:
isDarkTheme ? Colors.white : null), // Bold for "name"
), ),
TextSpan( TextSpan(
text: context.translate(' or ', 'أو'), text: context.translate(' or ', 'أو'),
style: TextStyle( style: TextStyle(
color: isDarkTheme ? Colors.white : null, color: isDarkTheme ? Colors.white : null,
) )),
),
TextSpan( TextSpan(
text: AppLocalizations.of(context)!.dob, text: AppLocalizations.of(context)!.dob,
style: TextStyle( style: TextStyle(
@ -1285,8 +1454,7 @@ class ConfirmationDialog extends ConsumerWidget {
text: ".", text: ".",
style: TextStyle( style: TextStyle(
color: isDarkTheme ? Colors.white : null, color: isDarkTheme ? Colors.white : null,
) )),
),
], ],
), ),
textAlign: TextAlign.center, textAlign: TextAlign.center,
@ -1309,23 +1477,36 @@ class ConfirmationDialog extends ConsumerWidget {
Navigator.of(context).pop(false); Navigator.of(context).pop(false);
}, },
style: OutlinedButton.styleFrom( style: OutlinedButton.styleFrom(
side: BorderSide(color: isDarkTheme ? Color(0xFF7296BE) : Color(0xFF92722A)), side: BorderSide(color: Color(0xFFB68A34)
// color:
// isDarkTheme ? Color(0xFF7296BE) : Color(0xFF92722A)
//
),
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(7)), borderRadius: BorderRadius.all(Radius.circular(7)),
), // Set the border color here ), // Set the border color here
), ),
child: Text( child: Text(
"Cancel", "Cancel",
style: TextStyle(color: isDarkTheme ? Color(0xFF7296BE) : Color(0xFF92722A),fontFamily: context.translate( style: TextStyle(
color: Color(0xFFB68A34),
// color: isDarkTheme ? Color(0xFF7296BE) : Color(0xFF92722A),
fontFamily: context.translate(
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi',
),), ),
),
), ),
), ),
ElevatedButton( ElevatedButton(
onPressed: () => Navigator.of(context).pop(true), onPressed: () => Navigator.of(context).pop(true),
style: ElevatedButton.styleFrom( 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, foregroundColor: Colors.white,
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8), borderRadius: BorderRadius.circular(8),

View File

@ -101,19 +101,16 @@ extension Dialogs on BuildContext {
return AlertDialog( return AlertDialog(
title: Text(title, title: Text(title,
style: TextStyle( style: TextStyle(
color: Color(0xFF898C81), color: Color(0xFF898C81), fontWeight: FontWeight.w700)),
fontWeight: FontWeight.w700)
),
content: content.length > 300 content: content.length > 300
? SingleChildScrollView( ? SingleChildScrollView(
child:Text( child: Text(content,
content, style: TextStyle(color: Color(0xFF898C81))),
style: TextStyle(color: Color(0xFF898C81))
),
) )
: Text( : Text(
content, content,
style: TextStyle(color:Color(0xFF898C81)), // Set content text color style: TextStyle(
color: Color(0xFF898C81)), // Set content text color
), ),
actions: [ actions: [
TextButton( TextButton(
@ -122,11 +119,12 @@ extension Dialogs on BuildContext {
rootNavigator: true, rootNavigator: true,
).pop, ).pop,
style: TextButton.styleFrom( style: TextButton.styleFrom(
backgroundColor: Color(0xFFAA8E83), // Background color // backgroundColor: Color(0xFFAA8E83), // Background color
backgroundColor: Color(0xFFB68A34), // Background color
foregroundColor: Colors.white, // Font (text) color foregroundColor: Colors.white, // Font (text) color
side: BorderSide( side: BorderSide(
// color: Color(0xFF92722A)), // Border outline color // color: Color(0xFF92722A)), // Border outline color
color: Color(0xFFAA8E83)), // Border outline color color: Color(0xFFB68A34)), // Border outline color
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
borderRadius: borderRadius:
BorderRadius.circular(8), // Optional: Rounded corners BorderRadius.circular(8), // Optional: Rounded corners

View File

@ -10,6 +10,7 @@ import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart'; import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:jwt_decoder/jwt_decoder.dart';
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
import 'package:the_validator/the_validator.dart'; import 'package:the_validator/the_validator.dart';
import 'package:uae_stat/config/app_links_helper.dart'; import 'package:uae_stat/config/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/app_theme.dart';
import 'package:uae_stat/config/theme/service.dart'; import 'package:uae_stat/config/theme/service.dart';
import 'package:uae_stat/config/theme/theme_provider.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/auth_use_case.dart';
import 'package:uae_stat/domain/use_cases/language.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/banner_asset_path.dart';
import 'package:uae_stat/infrastructure/services/img_asset_paths/icons/misc_icon_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'; 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/components/themed_text_field.dart';
import 'package:uae_stat/presentation/routes/bottom_bar_routes/tab_routes/home_route.dart'; import 'package:uae_stat/presentation/routes/bottom_bar_routes/tab_routes/home_route.dart';
import 'package:http/http.dart' as http; import 'package:http/http.dart' as http;
import 'package:url_launcher/url_launcher.dart';
import '../../Screens/auth_verification/registration.dart'; import '../../Screens/auth_verification/registration.dart';
import 'package:pocketbase/pocketbase.dart'; import 'package:pocketbase/pocketbase.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart';
@ -325,6 +329,175 @@ class LoginRoute extends HookConsumerWidget {
print('themeMode $themeMode'); 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 @override
Widget build(BuildContext context, WidgetRef ref) { Widget build(BuildContext context, WidgetRef ref) {
@ -662,9 +835,9 @@ class LoginRoute extends HookConsumerWidget {
print("Is Profile Complete: $isProfileComplete"); print("Is Profile Complete: $isProfileComplete");
// Extract intendedPath from query parameters (if coming from redirect) // Extract intendedPath from query parameters (if coming from redirect)
final String? intendedPath = // final String? intendedPath =
GoRouterState.of(context).uri.queryParameters['intendedPath']; // GoRouterState.of(context).uri.queryParameters['intendedPath'];
print("Extracted intendedPath after login: $intendedPath"); // print("Extracted intendedPath after login: $intendedPath");
if (!context.mounted) return; if (!context.mounted) return;
@ -676,7 +849,7 @@ class LoginRoute extends HookConsumerWidget {
} else { } else {
ref.read(localeProvider.notifier).setLocale(const Locale('en')); ref.read(localeProvider.notifier).setLocale(const Locale('en'));
} }
context.go(intendedPath ?? '/myhomepage'); context.go('/myhomepage');
} else { } else {
print('Redirecting to Profile Setup'); print('Redirecting to Profile Setup');
if (userId.isNotEmpty) { if (userId.isNotEmpty) {
@ -972,7 +1145,9 @@ class LoginRoute extends HookConsumerWidget {
final signInWithGoogleBtn = SizedBox( final signInWithGoogleBtn = SizedBox(
width: double.infinity, width: double.infinity,
child: OutlinedButton( child: OutlinedButton(
onPressed: () async {}, onPressed: () async {
googleLogin(context,ref,'google');
},
style: OutlinedButton.styleFrom( style: OutlinedButton.styleFrom(
side: const BorderSide(color: Color(0xFF000000)), side: const BorderSide(color: Color(0xFF000000)),
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
@ -1010,7 +1185,9 @@ class LoginRoute extends HookConsumerWidget {
final signInWithAppleBtn = SizedBox( final signInWithAppleBtn = SizedBox(
width: double.infinity, width: double.infinity,
child: OutlinedButton( child: OutlinedButton(
onPressed: () async {}, onPressed: () async {
googleLogin(context,ref,'apple');
},
style: OutlinedButton.styleFrom( style: OutlinedButton.styleFrom(
side: const BorderSide(color: Color(0xFF000000)), side: const BorderSide(color: Color(0xFF000000)),
shape: RoundedRectangleBorder( 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); currentTheme = ref.read(themeProvider);
print('123456789'); print('123456789');
print(currentTheme); print(currentTheme);
final isDark = currentTheme == ThemeMode.dark || final isDark = ref.read(themeProvider) == ThemeMode.dark ||
(currentTheme == ThemeMode.system && (ref.read(themeProvider) == ThemeMode.system &&
MediaQuery.of(context).platformBrightness == Brightness.dark); MediaQuery.of(context).platformBrightness == Brightness.dark);
final themeMode = (isDark ? 'dark' : 'light'); final themeMode = (isDark ? 'dark' : 'light');
@ -1634,7 +1634,7 @@ class InfoCard extends StatelessWidget {
Text( Text(
title, title,
style: TextStyle( style: TextStyle(
fontSize: 13, fontSize: 12,
fontWeight: FontWeight.w700, fontWeight: FontWeight.w700,
letterSpacing: 0, letterSpacing: 0,
// color: Colors.black, // color: Colors.black,

View File

@ -6,6 +6,7 @@ import 'package:flutter_svg/svg.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:dio/dio.dart'; import 'package:dio/dio.dart';
import 'package:http/http.dart' as http; 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:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:pocketbase/pocketbase.dart'; import 'package:pocketbase/pocketbase.dart';
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
@ -463,7 +464,8 @@ class _BookMarkState extends ConsumerState<BookMark> {
final List<Map<String, dynamic>> tabs = [ final List<Map<String, dynamic>> tabs = [
{ {
'title': AppLocalizations.of(context)!.all_bookmarks, '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, 'title': AppLocalizations.of(context)!.economy_title,
@ -662,8 +664,14 @@ class _BookMarkState extends ConsumerState<BookMark> {
decoration: BoxDecoration( decoration: BoxDecoration(
color: tabs[selectedTabIndex] color: tabs[selectedTabIndex]
['color'], ['color'],
borderRadius: BorderRadius.all( borderRadius: BorderRadius.only(
Radius.circular(35))), topLeft: Radius.circular(20),
topRight: Radius.circular(20))
// borderRadius: BorderRadius.all(
// Radius.circular(35))
),
padding: const EdgeInsets.only( padding: const EdgeInsets.only(
left: 16, left: 16,
bottom: 5, bottom: 5,
@ -1063,7 +1071,11 @@ class _CustomExpandableTileState extends State<CustomExpandableTile> {
child: Container( child: Container(
decoration: BoxDecoration( decoration: BoxDecoration(
color: widget.titleBackgroundColor, 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( padding: const EdgeInsets.only(
left: 16, bottom: 5, top: 5, right: 10), left: 16, bottom: 5, top: 5, right: 10),
child: Row( child: Row(

View File

@ -6,6 +6,7 @@ import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart'; import 'package:flutter/scheduler.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:go_router/go_router.dart'; import 'package:go_router/go_router.dart';
import 'package:http/http.dart' as http; import 'package:http/http.dart' as http;
@ -13,7 +14,6 @@ import 'package:image_picker/image_picker.dart';
import 'package:intl/intl.dart'; import 'package:intl/intl.dart';
import 'package:pocketbase/pocketbase.dart'; import 'package:pocketbase/pocketbase.dart';
import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences/shared_preferences.dart';
// import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:uae_stat/config/api_config.dart'; import 'package:uae_stat/config/api_config.dart';
import 'package:uae_stat/config/connectivity_provider.dart'; import 'package:uae_stat/config/connectivity_provider.dart';
import 'package:uae_stat/config/my_theme.dart'; import 'package:uae_stat/config/my_theme.dart';
@ -24,6 +24,7 @@ import 'package:uae_stat/infrastructure/services/img_asset_paths/icons/misc_icon
import 'package:uae_stat/presentation/components/indicators/locale_provider.dart'; import 'package:uae_stat/presentation/components/indicators/locale_provider.dart';
import 'package:uae_stat/presentation/routes/drawer_routes/custom_drawer_routes.dart'; import 'package:uae_stat/presentation/routes/drawer_routes/custom_drawer_routes.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart';
// import 'package:uae_stat/l10n/app_localizations.dart';
class EditProfile extends ConsumerStatefulWidget { class EditProfile extends ConsumerStatefulWidget {
const EditProfile({super.key}); const EditProfile({super.key});
@ -82,7 +83,8 @@ class _EditProfileState extends ConsumerState<EditProfile> {
"English": "en", "English": "en",
"Arabic": "ar", "Arabic": "ar",
}; };
String? _selectedCountry; // String? _selectedCountry;
ISOCountry? _selectedCountry;
String? _selectedLanguage; String? _selectedLanguage;
bool isChecked = false; bool isChecked = false;
bool showError = false; bool showError = false;
@ -201,7 +203,15 @@ class _EditProfileState extends ConsumerState<EditProfile> {
_usernameController.text = userDetailsResponse.data['uname'] ?? ''; _usernameController.text = userDetailsResponse.data['uname'] ?? '';
_emailController.text = userDetailsResponse.data['email'] ?? ''; _emailController.text = userDetailsResponse.data['email'] ?? '';
_fullNameController.text = userDetailsResponse.data['full_name'] ?? ''; _fullNameController.text = userDetailsResponse.data['full_name'] ?? '';
_selectedCountry = userDetailsResponse.data['country_region'] ?? ''; // _selectedCountry = userDetailsResponse.data['country_region'] ?? '';
final countryName =
(userDetailsResponse.data['country_region'] ?? '').toLowerCase();
_selectedCountry = ISOCountry.values.firstWhere(
(e) => e.nameEN.toLowerCase() == countryName,
orElse: () => ISOCountry.numeric784, // fallback to UAE
);
// _selectedLanguage = userDetailsResponse.data['language'] ?? ''; // _selectedLanguage = userDetailsResponse.data['language'] ?? '';
_isProfileCompleted = _isProfileCompleted =
userDetailsResponse.data['is_profile_completed'] ?? false; userDetailsResponse.data['is_profile_completed'] ?? false;
@ -376,6 +386,14 @@ class _EditProfileState extends ConsumerState<EditProfile> {
// if (result == true) { // if (result == true) {
// Validate only the country field // Validate only the country field
String? _validateDropdown(ISOCountry? value) {
if (value == null) {
return context.translate('Please select a country', 'يرجى اختيار دولة');
}
return null;
}
if (_validateDropdown(_selectedCountry) == null && if (_validateDropdown(_selectedCountry) == null &&
_validatePreferredLang(_selectedLanguage) == null) { _validatePreferredLang(_selectedLanguage) == null) {
try { try {
@ -383,8 +401,14 @@ class _EditProfileState extends ConsumerState<EditProfile> {
print('ShowConfirmationuserID - $userID '); print('ShowConfirmationuserID - $userID ');
// Retrieve data from the country/region field // Retrieve data from the country/region field
String countryRegion = // String countryRegion =
_selectedCountry ?? ''; // Ensure the country is selected // _selectedCountry ?? ''; // Ensure the country is selected
String countryRegion = context.translate(
_selectedCountry?.nameEN ?? '',
_selectedCountry?.nameAR ?? '',
);
String preferredLang = _selectedLanguage ?? ''; String preferredLang = _selectedLanguage ?? '';
// Create a multipart request // Create a multipart request
@ -543,6 +567,16 @@ class _EditProfileState extends ConsumerState<EditProfile> {
(ref.watch(themeProvider) == ThemeMode.system && (ref.watch(themeProvider) == ThemeMode.system &&
MediaQuery.of(context).platformBrightness == Brightness.dark); MediaQuery.of(context).platformBrightness == Brightness.dark);
// final searchTerm = useState('');
String searchTerm = '';
final _countries = ISOCountry.values.where((country) {
final query = searchTerm.trim().toLowerCase();
if (query.isEmpty) return true;
return country.nameEN.toLowerCase().contains(query) ||
country.nameAR.toLowerCase().contains(query);
}).toList();
return PopScope( return PopScope(
canPop: false, // Allow back navigation only if not login screen canPop: false, // Allow back navigation only if not login screen
onPopInvokedWithResult: (didPop, result) { onPopInvokedWithResult: (didPop, result) {
@ -973,66 +1007,142 @@ class _EditProfileState extends ConsumerState<EditProfile> {
() => _isHoveringDropdown = true), () => _isHoveringDropdown = true),
onExit: (_) => setState( onExit: (_) => setState(
() => _isHoveringDropdown = false), () => _isHoveringDropdown = false),
child: DropdownButtonFormField<String>(
style: TextStyle( child:
fontFamily: context.translate( DropdownButtonFormField<ISOCountry>(
'Roboto', isExpanded: true,
'NotoKufi', value:
), _selectedCountry, // ISOCountry type
fontSize: 16,
fontWeight: FontWeight.normal,
color: Color(0xFF544C4C),
),
value: _selectedCountry,
decoration: InputDecoration( decoration: InputDecoration(
enabledBorder: OutlineInputBorder( enabledBorder: OutlineInputBorder(
borderRadius: borderRadius:
BorderRadius.circular(10), BorderRadius.circular(10),
borderSide: BorderSide( borderSide: BorderSide(
color: MyTheme.topicColor( color: Color(0xFFB68A34),
IndicatorTopic width: 1,
.economy) ),
.shade400,
width: 1), // Enabled border
), ),
border: OutlineInputBorder( border: OutlineInputBorder(
borderSide: BorderSide(
color: Color(0xFF7296BE),
),
borderRadius: borderRadius:
BorderRadius.circular(8), BorderRadius.circular(8),
borderSide: BorderSide(
color: Color(0xFFB68A34)),
), ),
labelText: 'Select', labelText: context.translate(
'Select', 'اختيار'),
), ),
icon: Icon( icon: Icon(
Icons.keyboard_arrow_down_sharp, Icons.keyboard_arrow_down_sharp,
color: _isHoveringDropdown color: _isHoveringPreferredLang
? Colors.black ? Colors.black
: Colors.grey), : Colors.grey,
items: _countries ),
.map( items: _countries.map((country) {
(item) => return DropdownMenuItem<ISOCountry>(
DropdownMenuItem<String>( value: country,
value: item, child: SizedBox(
width: double.infinity,
child: Text( child: Text(
item, context.translate(
country.nameEN,
country.nameAR),
overflow:
TextOverflow.ellipsis,
maxLines: 1,
style: TextStyle( style: TextStyle(
fontFamily: fontFamily:
context.translate( context.translate(
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi'),
)), color: isDarkTheme
? Colors.white
: null,
), ),
), ),
) ),
.toList(), );
onChanged: (String? newValue) { }).toList(),
onChanged: (ISOCountry? newCountry) {
setState(() { setState(() {
_selectedCountry = newValue; _selectedCountry = newCountry;
}); });
}, },
validator: _validateDropdown, validator: (value) {
if (value == null)
return context.translate(
'Please select a country',
'يرجى اختيار دولة');
return null;
},
), ),
// child: DropdownButtonFormField<String>(
// style: TextStyle(
// fontFamily: context.translate(
// 'Roboto',
// 'NotoKufi',
// ),
// fontSize: 16,
// fontWeight: FontWeight.normal,
// // color: Color(0xFF544C4C),
// color: isDarkTheme
// ? Colors.white
// : Color(0xFFC3C6CB),
// ),
// value: _selectedCountry,
// decoration: InputDecoration(
// enabledBorder: OutlineInputBorder(
// borderRadius:
// BorderRadius.circular(10),
// borderSide: BorderSide(
// color: Color(0xFFB68A34),
// // color: MyTheme.topicColor(
// // IndicatorTopic
// // .economy)
// // .shade400,
// width: 1), // Enabled border
// ),
// border: OutlineInputBorder(
// borderSide: BorderSide(
// // color: Color(0xFF7296BE),
// color: Color(0xFFB68A34),
// ),
// borderRadius:
// BorderRadius.circular(8),
// ),
// labelText: 'Select',
// ),
// icon: Icon(
// Icons.keyboard_arrow_down_sharp,
// color: _isHoveringDropdown
// ? isDarkTheme
// ? Colors.white
// : Colors.black
// : Colors.grey),
// items: _countries
// .map(
// (item) =>
// DropdownMenuItem<String>(
// value: item,
// child: Text(
// item,
// style: TextStyle(
// fontFamily:
// context.translate(
// 'Roboto',
// 'NotoKufi',
// )),
// ),
// ),
// )
// .toList(),
// onChanged: (String? newValue) {
// setState(() {
// _selectedCountry = newValue;
// });
// },
// validator: _validateDropdown,
// ),
), ),
Row( Row(
mainAxisAlignment: mainAxisAlignment:
@ -1065,7 +1175,10 @@ class _EditProfileState extends ConsumerState<EditProfile> {
), ),
fontSize: 16, fontSize: 16,
fontWeight: FontWeight.normal, fontWeight: FontWeight.normal,
color: Color(0xFF544C4C), // color: Color(0xFF544C4C),
color: isDarkTheme
? Colors.white
: Color(0xFFC3C6CB),
), ),
value: _selectedLanguage, value: _selectedLanguage,
decoration: InputDecoration( decoration: InputDecoration(
@ -1073,15 +1186,17 @@ class _EditProfileState extends ConsumerState<EditProfile> {
borderRadius: borderRadius:
BorderRadius.circular(10), BorderRadius.circular(10),
borderSide: BorderSide( borderSide: BorderSide(
color: MyTheme.topicColor( color: Color(0xFFB68A34),
IndicatorTopic // color: MyTheme.topicColor(
.economy) // IndicatorTopic
.shade400, // .economy)
// .shade400,
width: 1), // Enabled border width: 1), // Enabled border
), ),
border: OutlineInputBorder( border: OutlineInputBorder(
borderSide: BorderSide( borderSide: BorderSide(
color: Color(0xFF7296BE), color: Color(0xFFB68A34),
// color: Color(0xFF7296BE),
), ),
borderRadius: borderRadius:
BorderRadius.circular(8), BorderRadius.circular(8),
@ -1183,8 +1298,11 @@ class _EditProfileState extends ConsumerState<EditProfile> {
'NotoKufi', 'NotoKufi',
), ),
// color: Colors.blue, // color: Colors.blue,
// color: Color(
// 0xFF648CBA),
//
color: Color( color: Color(
0xFF648CBA), 0xFFB68A34),
decoration: decoration:
TextDecoration TextDecoration
.underline, .underline,
@ -1225,7 +1343,10 @@ class _EditProfileState extends ConsumerState<EditProfile> {
), ),
// color: Colors.blue, // color: Colors.blue,
color: Color( color: Color(
0xFF648CBA), 0xFFB68A34),
// color: Color(
// 0xFF648CBA),
decoration: decoration:
TextDecoration TextDecoration
.underline, .underline,
@ -1303,7 +1424,10 @@ class _EditProfileState extends ConsumerState<EditProfile> {
.change_password, .change_password,
style: TextStyle( style: TextStyle(
// color: Color(0xFF648CBA), // color: Color(0xFF648CBA),
color: isDarkTheme ? Color(0xFF9EB3E4) : Color(0xFF985400), // color: isDarkTheme
// ? Color(0xFF9EB3E4)
// : Color(0xFF985400),
color: Color(0xFFB68A34),
fontSize: 14, fontSize: 14,
fontWeight: FontWeight.w700, fontWeight: FontWeight.w700,
fontFamily: context.translate( fontFamily: context.translate(
@ -1348,7 +1472,11 @@ class _EditProfileState extends ConsumerState<EditProfile> {
// } // }
}, },
style: ElevatedButton.styleFrom( style: ElevatedButton.styleFrom(
backgroundColor: isDarkTheme ? Color(0xFF24B4FB) : Color(0xFF92722A), backgroundColor: Color(0xFFB68A34),
// backgroundColor: isDarkTheme
// ? Color(0xFF24B4FB)
// : Color(0xFF92722A),
minimumSize: minimumSize:
Size(double.infinity, 50), Size(double.infinity, 50),
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
@ -1482,7 +1610,8 @@ class ConfirmationDialog extends StatelessWidget {
Navigator.of(context).pop(false); Navigator.of(context).pop(false);
}, },
style: OutlinedButton.styleFrom( style: OutlinedButton.styleFrom(
side: BorderSide(color: Color(0xFF92722A)), // side: BorderSide(color: Color(0xFF92722A)),
side: BorderSide(color: Color(0xFFB68A34)),
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(7)), borderRadius: BorderRadius.all(Radius.circular(7)),
), // Set the border color here ), // Set the border color here
@ -1490,7 +1619,8 @@ class ConfirmationDialog extends StatelessWidget {
child: Text( child: Text(
'Cancel', 'Cancel',
style: TextStyle( style: TextStyle(
color: Color(0xFF92722A), color: Color(0xFFB68A34),
// color: Color(0xFF92722A),
fontFamily: context.translate( fontFamily: context.translate(
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi',
@ -1501,7 +1631,8 @@ class ConfirmationDialog extends StatelessWidget {
ElevatedButton( ElevatedButton(
onPressed: () => Navigator.of(context).pop(true), onPressed: () => Navigator.of(context).pop(true),
style: ElevatedButton.styleFrom( style: ElevatedButton.styleFrom(
backgroundColor: const Color(0xFF92722A), // Brown color // backgroundColor: const Color(0xFF92722A), // Brown color
backgroundColor: const Color(0xFFB68A34), // Brown color
foregroundColor: Colors.white, foregroundColor: Colors.white,
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8), borderRadius: BorderRadius.circular(8),

View File

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

View File

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

View File

@ -804,6 +804,54 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "14.8.1" 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: graphs:
dependency: transitive dependency: transitive
description: description:

View File

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