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,14 +39,15 @@ 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(
'pb@venbainfotech.com', 'pb@venbainfotech.com',
'pb@venbainfotech.com', 'pb@venbainfotech.com',
); );
final String adminToken = adminAuth.token; final String adminToken = adminAuth.token;
print('adminToken: $adminToken'); print('adminToken: $adminToken');
final response = await http.get( final response = await http.get(
Uri.parse(url), Uri.parse(url),
headers: { headers: {
@ -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:
value: theme, Text(theme.name[0].toUpperCase() + theme.name.substring(1)),
groupValue: _selectedTheme, value: theme,
onChanged: (value) => setState(() => _selectedTheme = value!), groupValue: _selectedTheme,
); onChanged: (value) async {
final prefs = await SharedPreferences.getInstance();
print("THEME_DIALval- $value");
// Store enum as string
await prefs.setString(
'ThemeType', value.toString().split('.').last);
setState(() => _selectedTheme = value!);
});
}).toList(), }).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 {
@ -27,9 +27,9 @@ class CreateNewPw extends ConsumerStatefulWidget {
const CreateNewPw( const CreateNewPw(
{Key? key, {Key? key,
required this.userId, required this.userId,
required this.email, required this.email,
required this.keyParam}); required this.keyParam});
@override @override
ConsumerState<CreateNewPw> createState() => _CreateNewPwState(); ConsumerState<CreateNewPw> createState() => _CreateNewPwState();
@ -126,7 +126,7 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
try { try {
// Attempt to authenticate the user with email and password // Attempt to authenticate the user with email and password
final authResponse = final authResponse =
await _pb.collection('users').authWithPassword(email, password); await _pb.collection('users').authWithPassword(email, password);
if (authResponse != null) { if (authResponse != null) {
print('Password match successful for email: $email'); print('Password match successful for email: $email');
@ -156,20 +156,20 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
}; };
bool isPasswordValid = bool isPasswordValid =
await verifyUserPassword(widget.email, oldPassword); await verifyUserPassword(widget.email, oldPassword);
print(isPasswordValid); print(isPasswordValid);
if (isPasswordValid) { if (isPasswordValid) {
// Update password // Update password
await _pb.collection('users').update( await _pb.collection('users').update(
userId, userId,
body: { body: {
'password': newPassword, 'password': newPassword,
'passwordConfirm': newPassword, 'passwordConfirm': newPassword,
}, },
headers: headers, headers: headers,
); );
setState(() { setState(() {
isLoading = false; isLoading = false;
@ -179,13 +179,13 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
ScaffoldMessenger.of(context).showSnackBar( ScaffoldMessenger.of(context).showSnackBar(
SnackBar( SnackBar(
content: Text( content: Text(
AppLocalizations.of(context)!.password_update_successfully, AppLocalizations.of(context)!.password_update_successfully,
style: TextStyle( style: TextStyle(
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,53 +257,51 @@ 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(
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) {
if (didPop) return; if (didPop) return;
logout(context);// Show exit confirmation dialog logout(context); // Show exit confirmation dialog
}, },
child: Scaffold( child: Scaffold(
backgroundColor: isDarkTheme ? Color(0xFF111111) : Colors.white, backgroundColor: isDarkTheme ? Color(0xFF111111) : Colors.white,
body: Stack(children: [ body: Stack(children: [
SingleChildScrollView( SingleChildScrollView(
child: SafeArea( child: SafeArea(
child: _isPasswordUpdated child: _isPasswordUpdated
? _buildSuccessContent(screenHeight, screenWidth) ? _buildSuccessContent(
: _buildPasswordForm(ref, screenHeight, screenWidth), screenHeight, screenWidth, isDarkTheme)
), : _buildPasswordForm(ref, screenHeight, screenWidth),
),
if (isLoading)
Container(
color: Color(0x98FFFCE5), // Semi-transparent background
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Container(
margin: EdgeInsets.symmetric(
horizontal: 40), // Left & Right space
child: LinearProgressIndicator(
minHeight: 5, // Adjust thickness
backgroundColor:
Colors.grey[100], // Optional: Background color
valueColor: AlwaysStoppedAnimation<Color>(
Color(0xFFAA8E83)), // Loader color
),
),
],
), ),
) ),
])) if (isLoading)
); Container(
color: Color(0x98FFFCE5), // Semi-transparent background
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Container(
margin: EdgeInsets.symmetric(
horizontal: 40), // Left & Right space
child: LinearProgressIndicator(
minHeight: 5, // Adjust thickness
backgroundColor:
Colors.grey[100], // Optional: Background color
valueColor: AlwaysStoppedAnimation<Color>(
Color(0xFFAA8E83)), // Loader color
),
),
],
),
)
])));
} }
Widget _buildPasswordForm( 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),
@ -394,7 +396,7 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
'NotoKufi', 'NotoKufi',
), ),
fontSize: fontSize:
passwordLocale?.languageCode == 'ar' ? 14 : 15, passwordLocale?.languageCode == 'ar' ? 14 : 15,
fontWeight: FontWeight.w700, fontWeight: FontWeight.w700,
color: Color(0xFF898C81)), color: Color(0xFF898C81)),
), ),
@ -407,7 +409,7 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
'NotoKufi', 'NotoKufi',
), ),
fontSize: fontSize:
passwordLocale?.languageCode == 'ar' ? 14 : 15, passwordLocale?.languageCode == 'ar' ? 14 : 15,
color: Color(0xFF898C81), color: Color(0xFF898C81),
fontWeight: FontWeight.w700), fontWeight: FontWeight.w700),
), ),
@ -423,12 +425,13 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
hintText: AppLocalizations.of(context)!.old_password, hintText: AppLocalizations.of(context)!.old_password,
// prefixIcon: Icon(Icons.lock, color: Colors.blue), // prefixIcon: Icon(Icons.lock, color: Colors.blue),
hintStyle: TextStyle( hintStyle: TextStyle(
color: isDarkTheme ? Colors.white : Color(0xFFC3C6CB), color: isDarkTheme ? Colors.white : Color(0xFFC3C6CB),
fontWeight: FontWeight.w400, fontWeight: FontWeight.w400,
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(
@ -507,12 +516,13 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
hintText: AppLocalizations.of(context)!.enter_new_password, hintText: AppLocalizations.of(context)!.enter_new_password,
// prefixIcon: Icon(Icons.lock, color: Colors.blue), // prefixIcon: Icon(Icons.lock, color: Colors.blue),
hintStyle: TextStyle( hintStyle: TextStyle(
color: Color(0xFFC3C6CB), color: Color(0xFFC3C6CB),
fontWeight: FontWeight.w400, fontWeight: FontWeight.w400,
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(
@ -589,12 +601,13 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
// hintText: 'Confirm new password', // hintText: 'Confirm new password',
hintText: AppLocalizations.of(context)!.confirm_new_password, hintText: AppLocalizations.of(context)!.confirm_new_password,
hintStyle: TextStyle( hintStyle: TextStyle(
color: Color(0xFFC3C6CB), color: Color(0xFFC3C6CB),
fontWeight: FontWeight.w400, fontWeight: FontWeight.w400,
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),
@ -698,7 +714,7 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
'NotoKufi', 'NotoKufi',
), ),
fontSize: fontSize:
passwordLocale?.languageCode == 'ar' ? 14 : 18, passwordLocale?.languageCode == 'ar' ? 14 : 18,
color: Colors.white), color: Colors.white),
), ),
SizedBox(width: 2), SizedBox(width: 2),
@ -731,7 +747,8 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
); );
} }
Widget _buildSuccessContent(double screenHeight, double screenWidth) { Widget _buildSuccessContent(
double screenHeight, double screenWidth, bool isDarkTheme) {
print('IN'); 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],
@ -810,7 +828,7 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
], ],
), ),
), ),
SizedBox(height: screenHeight*0.25), SizedBox(height: screenHeight * 0.25),
// Spacer(), // Spacer(),
Center( Center(
// child: Container( // child: Container(
@ -829,4 +847,4 @@ class _CreateNewPwState extends ConsumerState<CreateNewPw> {
), ),
); );
} }
} }

View File

@ -14,6 +14,7 @@ import 'package:uae_stat/infrastructure/services/img_asset_paths/banner_asset_pa
import 'package:uae_stat/infrastructure/services/img_asset_paths/icons/misc_icon_asset_path.dart'; import 'package:uae_stat/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(
@ -313,24 +312,28 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
Navigator.pop(context); Navigator.pop(context);
setState(() { setState(() {
isRegistering = isRegistering =
false; // Re-enable the button after error false; // Re-enable the button after error
}); });
}, },
style: TextButton.styleFrom( style: TextButton.styleFrom(
backgroundColor: backgroundColor:
Color(0xFFAA8E83), // Set background color Color(0xFFAA8E83), // Set background color
foregroundColor: Colors.white, foregroundColor: Colors.white,
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
borderRadius: borderRadius:
BorderRadius.circular(10.0), // Set text color BorderRadius.circular(10.0), // Set text color
), ),
), ),
child: Text( child: Text(
context.translate('Ok', 'حسنًا'), context.translate('Ok', 'حسنًا'),
style: TextStyle(color: Colors.white, fontSize: 16, fontFamily: context.translate( style: TextStyle(
'Roboto', color: Colors.white,
'NotoKufi', fontSize: 16,
),), fontFamily: context.translate(
'Roboto',
'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;
@ -415,7 +416,7 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
if (didPop) return; if (didPop) return;
context.go('/login'); // Show exit confirmation dialog context.go('/login'); // Show exit confirmation dialog
}, },
child:Scaffold( child: Scaffold(
backgroundColor: isDarkTheme ? Color(0xFF111111) : Colors.white, backgroundColor: isDarkTheme ? Color(0xFF111111) : Colors.white,
body: SafeArea( body: SafeArea(
child: Stack(children: [ child: Stack(children: [
@ -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
: BannerAssetPath.fcscLogoLight), // Background image asset .fcscLogoLight), // Background image asset
fit: BoxFit.fill, // 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),
@ -590,11 +610,15 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
context.translate( context.translate(
'Retry', 'أعد المحاولة'), 'Retry', 'أعد المحاولة'),
style: TextStyle( style: TextStyle(
fontFamily: context.translate( fontFamily: context.translate(
'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
: BannerAssetPath.fcscLogoLight), // Background image asset .fcscLogoLight), // Background image asset
fit: BoxFit.fill, // 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(
@ -629,13 +653,15 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
AppLocalizations.of(context)! AppLocalizations.of(context)!
.register_title, .register_title,
style: TextStyle( style: TextStyle(
fontFamily: context.translate( fontFamily: context.translate(
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi',
), ),
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(
@ -743,7 +776,7 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi',
), ),
color: const Color(0xFFC3C6CB), color: const Color(0xFFC3C6CB),
fontSize: registerLocale fontSize: registerLocale
?.languageCode == ?.languageCode ==
'ar' 'ar'
@ -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',
@ -842,7 +879,7 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi',
), ),
color: const Color(0xFFC3C6CB), color: const Color(0xFFC3C6CB),
fontSize: registerLocale fontSize: registerLocale
?.languageCode == ?.languageCode ==
'ar' 'ar'
@ -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',
@ -977,7 +1018,7 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi',
), ),
color: const Color(0xFFC3C6CB), color: const Color(0xFFC3C6CB),
fontSize: registerLocale fontSize: registerLocale
?.languageCode == ?.languageCode ==
'ar' 'ar'
@ -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',
@ -1099,7 +1144,7 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi',
), ),
color: const Color(0xFFC3C6CB), color: const Color(0xFFC3C6CB),
fontSize: registerLocale fontSize: registerLocale
?.languageCode == ?.languageCode ==
'ar' 'ar'
@ -1140,8 +1185,8 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
}, },
side: BorderSide( side: BorderSide(
color: showError color: showError
? Color(0xFFD83731) ? Color(0xFFD83731)
: Color(0xFFB68A34), : Color(0xFFB68A34),
width: 1, width: 1,
), ),
), ),
@ -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,
), // ),
], ],
), ),
), ),
@ -1491,4 +1571,4 @@ class _RegisterScreenState extends ConsumerState<RegisterScreen> {
)), )),
); );
} }
} }

View File

@ -5,6 +5,7 @@ import 'package:external_repos/external_repos.dart';
import 'package:flutter/gestures.dart'; import 'package:flutter/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 &&
@ -198,10 +204,10 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
_isLoading = true; // Start loading _isLoading = true; // Start loading
}); });
final XFile? pickedFile = final XFile? pickedFile =
await _picker.pickImage(source: ImageSource.gallery); await _picker.pickImage(source: ImageSource.gallery);
if (pickedFile != null) { if (pickedFile != null) {
final String fileExtension = final String fileExtension =
pickedFile.path.split('.').last.toLowerCase(); pickedFile.path.split('.').last.toLowerCase();
if (fileExtension == 'jpg' || if (fileExtension == 'jpg' ||
fileExtension == 'jpeg' || fileExtension == 'jpeg' ||
fileExtension == 'png' || fileExtension == 'png' ||
@ -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(
style: TextStyle( content: Text(
fontFamily: context.translate( 'Please select a JPG, JPEG, or PNG file.',
'Roboto', style: TextStyle(
'NotoKufi', fontFamily: context.translate(
) 'Roboto',
),)), 'NotoKufi',
)),
)),
); );
} }
} }
@ -245,7 +253,7 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
return Theme( return Theme(
data: Theme.of(context).copyWith( data: Theme.of(context).copyWith(
dialogBackgroundColor: dialogBackgroundColor:
Colors.white, // Background color of the date picker Colors.white, // Background color of the date picker
textButtonTheme: TextButtonThemeData( textButtonTheme: TextButtonThemeData(
style: ButtonStyle( style: ButtonStyle(
shape: WidgetStateProperty.all(RoundedRectangleBorder( shape: WidgetStateProperty.all(RoundedRectangleBorder(
@ -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
@ -347,14 +360,14 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
// Create a multipart request // Create a multipart request
final uri = final uri =
Uri.parse('${_pb.baseUrl}/api/collections/users/records/$userID'); Uri.parse('${_pb.baseUrl}/api/collections/users/records/$userID');
final request = http.MultipartRequest('PATCH', uri); final request = http.MultipartRequest('PATCH', uri);
// Add other fields // Add other fields
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(
style: TextStyle( AppLocalizations.of(context)!.profile_updated_successfully,
fontFamily: context.translate( style: TextStyle(
'Roboto', fontFamily: context.translate(
'NotoKufi', 'Roboto',
) '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(
fontFamily: context.translate( content: Text(
'Roboto', context.translate("Failed to update profile: $error",
'NotoKufi', '$error فشل في تحديث الملف الشخصي: '),
) style: TextStyle(
),)),); fontFamily: context.translate(
'Roboto',
'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),
'Roboto', fontWeight: FontWeight.w700,
'NotoKufi', fontFamily: context.translate(
),), 'Roboto',
'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(
'Roboto', color: Color(0xFF898C81),
'NotoKufi', fontFamily: context.translate(
),), 'Roboto',
'NotoKufi',
),
),
), ),
actions: [ actions: [
TextButton( TextButton(
@ -477,10 +502,11 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
'إلغاء', 'إلغاء',
), ),
style: TextStyle( style: TextStyle(
color: Color(0xFFAA8E83),fontFamily: context.translate( color: Color(0xFFAA8E83),
'Roboto', fontFamily: context.translate(
'NotoKufi', 'Roboto',
), // Text color 'NotoKufi',
), // Text color
), ),
), ),
), ),
@ -499,10 +525,11 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
'تسجيل الخروج', 'تسجيل الخروج',
), ),
style: TextStyle( style: TextStyle(
color: Colors.white, fontFamily: context.translate( color: Colors.white,
'Roboto', fontFamily: context.translate(
'NotoKufi', 'Roboto',
),// Text color 'NotoKufi',
), // 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(
'Roboto', color: Color(0xFF985400),
'NotoKufi', fontFamily: context.translate(
),), 'Roboto',
'NotoKufi',
),
),
), ),
actions: [ actions: [
Consumer( Consumer(
@ -633,7 +676,7 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
backgroundImage: _profileImage != null backgroundImage: _profileImage != null
? FileImage(_profileImage!) ? FileImage(_profileImage!)
: AssetImage("assets/edit_profile/profile.png") : AssetImage("assets/edit_profile/profile.png")
as ImageProvider, as ImageProvider,
child: Align( child: Align(
alignment: Alignment.bottomRight, alignment: Alignment.bottomRight,
child: GestureDetector( child: GestureDetector(
@ -657,7 +700,7 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
child: CircularProgressIndicator( child: CircularProgressIndicator(
strokeWidth: 2, strokeWidth: 2,
valueColor: valueColor:
AlwaysStoppedAnimation<Color>(Colors.grey), AlwaysStoppedAnimation<Color>(Colors.grey),
), ),
), ),
], ],
@ -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,
'Roboto', fontWeight: FontWeight.w500,
'NotoKufi', fontFamily: context.translate(
),), 'Roboto',
'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),
), ),
@ -807,12 +858,13 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
Text( Text(
AppLocalizations.of(context)!.dob, AppLocalizations.of(context)!.dob,
style: TextStyle( style: TextStyle(
fontFamily: context.translate( fontFamily: context.translate(
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi',
), ),
fontSize: 16, fontWeight: FontWeight.w500, fontSize: 16,
color:isDarkTheme ? Colors.white : null, fontWeight: FontWeight.w500,
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,
), ),
@ -854,11 +913,11 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
width: 45, width: 45,
padding: EdgeInsets.only(right: 1), padding: EdgeInsets.only(right: 1),
alignment: alignment:
Alignment.center, // Center the icon vertically Alignment.center, // Center the icon vertically
child: Icon( child: Icon(
Icons.keyboard_arrow_down_sharp, Icons.keyboard_arrow_down_sharp,
color: color:
_isHoveringDate ? Colors.black : Colors.grey, _isHoveringDate ? Colors.black : Colors.grey,
), ),
), ),
), ),
@ -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(
style: TextStyle( width: double.infinity,
fontFamily: context.translate( child: Text(
'Roboto', // item.nameEN,
'NotoKufi', context.translate(
), item.nameEN, item.nameAR),
color: isDarkTheme ? Colors.white : null, overflow: TextOverflow.ellipsis,
),), maxLines: 1,
)) style: TextStyle(
fontFamily: context.translate(
'Roboto',
'NotoKufi',
),
// 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(
@ -940,12 +1070,13 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
Text( Text(
AppLocalizations.of(context)!.preferredLang, AppLocalizations.of(context)!.preferredLang,
style: TextStyle( style: TextStyle(
fontFamily: context.translate( fontFamily: context.translate(
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi',
), ),
fontSize: 16, fontWeight: FontWeight.w500, fontSize: 16,
color: isDarkTheme ? Colors.white : null, fontWeight: FontWeight.w500,
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),
), ),
@ -980,16 +1115,18 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
: Colors.grey), : Colors.grey),
items: preferred_language items: preferred_language
.map((item) => DropdownMenuItem<String>( .map((item) => DropdownMenuItem<String>(
value: item, value: item,
child: Text(item, child: Text(
style: TextStyle( item,
fontFamily: context.translate( style: TextStyle(
'Roboto', fontFamily: context.translate(
'NotoKufi', 'Roboto',
), 'NotoKufi',
color: isDarkTheme ? Colors.white : null, ),
),), color: isDarkTheme ? Colors.white : null,
)) ),
),
))
.toList(), .toList(),
onChanged: (String? newValue) { onChanged: (String? newValue) {
setState(() { setState(() {
@ -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(
@ -1173,12 +1334,15 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
} else { } else {
setState(() { setState(() {
showError = showError =
!isChecked; // Show error if the checkbox is not checked !isChecked; // Show error if the checkbox is not checked
}); });
} }
}, },
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),
@ -1186,14 +1350,17 @@ class _ProfileScreenState extends ConsumerState<ProfileScreen> {
), ),
child: Row( child: Row(
mainAxisAlignment: mainAxisAlignment:
MainAxisAlignment.center, // Center the content MainAxisAlignment.center, // Center the content
children: [ children: [
Text( Text(
AppLocalizations.of(context)!.save, AppLocalizations.of(context)!.save,
style: TextStyle(color: Colors.white,fontFamily: context.translate( style: TextStyle(
'Roboto', color: Colors.white,
'NotoKufi', fontFamily: context.translate(
),), 'Roboto',
'NotoKufi',
),
),
), ),
SizedBox(width: 8), // Add space between text and icon SizedBox(width: 8), // Add space between text and icon
Image.asset( Image.asset(
@ -1258,35 +1425,36 @@ class ConfirmationDialog extends ConsumerWidget {
children: [ children: [
TextSpan( TextSpan(
text: AppLocalizations.of(context)!.name, text: AppLocalizations.of(context)!.name,
style:
TextStyle(fontWeight: FontWeight.w700,fontFamily: context.translate(
'Roboto',
'NotoKufi',
),color: isDarkTheme ? Colors.white : null), // Bold for "name"
),
TextSpan(
text: context.translate(' or ', 'أو'),
style: TextStyle(
color: isDarkTheme ? Colors.white : null,
)
),
TextSpan(
text: AppLocalizations.of(context)!.dob,
style: TextStyle( style: TextStyle(
fontWeight: FontWeight.w700,
fontFamily: context.translate( fontFamily: context.translate(
'Roboto', 'Roboto',
'NotoKufi', 'NotoKufi',
), ),
fontWeight: FontWeight.w700, color:
color: isDarkTheme ? Colors.white : null, isDarkTheme ? Colors.white : null), // Bold for "name"
),
TextSpan(
text: context.translate(' or ', 'أو'),
style: TextStyle(
color: isDarkTheme ? Colors.white : null,
)),
TextSpan(
text: AppLocalizations.of(context)!.dob,
style: TextStyle(
fontFamily: context.translate(
'Roboto',
'NotoKufi',
),
fontWeight: FontWeight.w700,
color: isDarkTheme ? Colors.white : null,
), // Bold for "date of birth" ), // Bold for "date of birth"
), ),
TextSpan( TextSpan(
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(
'Roboto', color: Color(0xFFB68A34),
'NotoKufi', // color: isDarkTheme ? Color(0xFF7296BE) : Color(0xFF92722A),
),), fontFamily: context.translate(
'Roboto',
'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),
@ -1351,4 +1532,4 @@ class ConfirmationDialog extends ConsumerWidget {
], ],
); );
} }
} }

View File

@ -40,12 +40,12 @@ extension Dialogs on BuildContext {
/// If [errorDialogBuilder] is provided, an /// If [errorDialogBuilder] is provided, an
/// [showLogBtn] is also true exception is thrown; /// [showLogBtn] is also true exception is thrown;
Future<T> loaderWithErrorDialog<T>( Future<T> loaderWithErrorDialog<T>(
FutureOr<T> Function() computation, { FutureOr<T> Function() computation, {
Future<void> Function( Future<void> Function(
Object error, [ Object error, [
StackTrace stackTrace, StackTrace stackTrace,
])? errorDialogBuilder, ])? errorDialogBuilder,
}) async { }) async {
final loaderContext = await _pushLoaderDialog(); final loaderContext = await _pushLoaderDialog();
late final T value; late final T value;
try { try {
@ -100,20 +100,17 @@ extension Dialogs on BuildContext {
final contentText = Text(content); final contentText = Text(content);
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
@ -154,11 +152,11 @@ extension Dialogs on BuildContext {
); );
Future<bool?> confirmationDialog( Future<bool?> confirmationDialog(
String titleText, String titleText,
String contentText, { String contentText, {
String cancelText = 'Cancel', String cancelText = 'Cancel',
String confirmText = 'Confirm', String confirmText = 'Confirm',
}) => }) =>
showDialog<bool>( showDialog<bool>(
context: this, context: this,
barrierDismissible: false, barrierDismissible: false,

View File

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

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