From e994e8e5e0ab680b5e76e3e9c429f97ca6bed64e Mon Sep 17 00:00:00 2001 From: Juki-shiba Date: Thu, 5 Jun 2025 18:10:58 +0530 Subject: [PATCH] competitiveness --- .../arm64-v8a/configure_fingerprint.bin | 24 +- .../armeabi-v7a/configure_fingerprint.bin | 24 +- .../m4rj1019/x86/configure_fingerprint.bin | 24 +- .../m4rj1019/x86_64/configure_fingerprint.bin | 24 +- assets/competitiveness/solo.png | Bin 0 -> 4991 bytes assets/competitiveness/soloo.png | Bin 0 -> 2720 bytes lib/config/my_router.dart | 9 + .../Detailedcompetitiveness.dart | 222 +++++++ .../Competitiveness/competitiveness.dart | 110 ++-- .../DetailedCountryProfilePage.dart | 574 +++++++++++++----- pubspec.lock | 72 +-- pubspec.yaml | 1 + 12 files changed, 800 insertions(+), 284 deletions(-) create mode 100644 assets/competitiveness/solo.png create mode 100644 assets/competitiveness/soloo.png create mode 100644 lib/presentation/Screens/Bottom Navigation Pages/Competitiveness/Detailedcompetitiveness.dart diff --git a/android/app/.cxx/Debug/m4rj1019/arm64-v8a/configure_fingerprint.bin b/android/app/.cxx/Debug/m4rj1019/arm64-v8a/configure_fingerprint.bin index 0e10e2c5..2ab8857d 100644 --- a/android/app/.cxx/Debug/m4rj1019/arm64-v8a/configure_fingerprint.bin +++ b/android/app/.cxx/Debug/m4rj1019/arm64-v8a/configure_fingerprint.bin @@ -2,27 +2,27 @@ C/C++ Structured Logd b `C:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\arm64-v8a\additional_project_files.txtC A -?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  2  Ҷ2a +?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  2  Ҷ2a _ -]C:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\arm64-v8a\android_gradle_build.json  2 축2f +]C:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\arm64-v8a\android_gradle_build.json  2 축2f d -bC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\arm64-v8a\android_gradle_build_mini.json  2 2S +bC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\arm64-v8a\android_gradle_build_mini.json  2 2S Q -OC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\arm64-v8a\build.ninja  2 2W +OC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\arm64-v8a\build.ninja  2 2W U -SC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\arm64-v8a\build.ninja.txt  2\ +SC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\arm64-v8a\build.ninja.txt  2\ Z -XC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\arm64-v8a\build_file_index.txt  2 S 2] +XC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\arm64-v8a\build_file_index.txt  2 S 2] [ -YC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\arm64-v8a\compile_commands.json  2a +YC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\arm64-v8a\compile_commands.json  2a _ -]C:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\arm64-v8a\compile_commands.json.bin  2 g +]C:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\arm64-v8a\compile_commands.json.bin  2 g e -cC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\arm64-v8a\metadata_generation_command.txt  2 +cC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\arm64-v8a\metadata_generation_command.txt  2  2Z X -VC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\arm64-v8a\prefab_config.json  2  ( 2_ +VC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\arm64-v8a\prefab_config.json  2  ( 2_ ] -[C:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\arm64-v8a\symbol_folder_index.txt  2  R 2W +[C:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\arm64-v8a\symbol_folder_index.txt  2  R 2W U -SC:\flutter\src\flutter\packages\flutter_tools\gradle\src\main\groovy\CMakeLists.txt  2  2 \ No newline at end of file +SC:\flutter\src\flutter\packages\flutter_tools\gradle\src\main\groovy\CMakeLists.txt  2  2 \ No newline at end of file diff --git a/android/app/.cxx/Debug/m4rj1019/armeabi-v7a/configure_fingerprint.bin b/android/app/.cxx/Debug/m4rj1019/armeabi-v7a/configure_fingerprint.bin index c844b3b2..5797e372 100644 --- a/android/app/.cxx/Debug/m4rj1019/armeabi-v7a/configure_fingerprint.bin +++ b/android/app/.cxx/Debug/m4rj1019/armeabi-v7a/configure_fingerprint.bin @@ -2,27 +2,27 @@ C/C++ Structured Logf d bC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\armeabi-v7a\additional_project_files.txtC A -?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  2  ږ2c +?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  勝2  ږ2c a -_C:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\armeabi-v7a\android_gradle_build.json  2 얖2h +_C:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\armeabi-v7a\android_gradle_build.json  拝2 얖2h f -dC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\armeabi-v7a\android_gradle_build_mini.json  2 2U +dC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\armeabi-v7a\android_gradle_build_mini.json  拝2 2U S -QC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\armeabi-v7a\build.ninja  2 2Y +QC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\armeabi-v7a\build.ninja  拝2 2Y W -UC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\armeabi-v7a\build.ninja.txt  2^ +UC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\armeabi-v7a\build.ninja.txt  拝2^ \ -ZC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\armeabi-v7a\build_file_index.txt  2 S 2_ +ZC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\armeabi-v7a\build_file_index.txt  拝2 S 2_ ] -[C:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\armeabi-v7a\compile_commands.json  2c +[C:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\armeabi-v7a\compile_commands.json  拝2c a -_C:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\armeabi-v7a\compile_commands.json.bin  2 i +_C:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\armeabi-v7a\compile_commands.json.bin  拝2 i g -eC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\armeabi-v7a\metadata_generation_command.txt  2 +eC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\armeabi-v7a\metadata_generation_command.txt  拝2  ט2\ Z -XC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\armeabi-v7a\prefab_config.json  2  ( 2a +XC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\armeabi-v7a\prefab_config.json  拝2  ( 2a _ -]C:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\armeabi-v7a\symbol_folder_index.txt  2  T 2W +]C:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\armeabi-v7a\symbol_folder_index.txt  拝2  T 2W U -SC:\flutter\src\flutter\packages\flutter_tools\gradle\src\main\groovy\CMakeLists.txt  2  2 \ No newline at end of file +SC:\flutter\src\flutter\packages\flutter_tools\gradle\src\main\groovy\CMakeLists.txt  拝2  2 \ No newline at end of file diff --git a/android/app/.cxx/Debug/m4rj1019/x86/configure_fingerprint.bin b/android/app/.cxx/Debug/m4rj1019/x86/configure_fingerprint.bin index e49513ed..f94d43ce 100644 --- a/android/app/.cxx/Debug/m4rj1019/x86/configure_fingerprint.bin +++ b/android/app/.cxx/Debug/m4rj1019/x86/configure_fingerprint.bin @@ -2,27 +2,27 @@ C/C++ Structured Log^ \ ZC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\x86\additional_project_files.txtC A -?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  ё2  2[ +?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  2  2[ Y -WC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\x86\android_gradle_build.json  ґ2 2` +WC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\x86\android_gradle_build.json  2 2` ^ -\C:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\x86\android_gradle_build_mini.json  ґ2 2M +\C:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\x86\android_gradle_build_mini.json  2 2M K -IC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\x86\build.ninja  ґ2 2Q +IC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\x86\build.ninja  2 2Q O -MC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\x86\build.ninja.txt  ґ2V +MC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\x86\build.ninja.txt  2V T -RC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\x86\build_file_index.txt  ґ2 S 2W +RC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\x86\build_file_index.txt  2 S 2W U -SC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\x86\compile_commands.json  ґ2[ +SC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\x86\compile_commands.json  2[ Y -WC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\x86\compile_commands.json.bin  ґ2 a +WC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\x86\compile_commands.json.bin  2 a _ -]C:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\x86\metadata_generation_command.txt  ґ2 +]C:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\x86\metadata_generation_command.txt  2  2T R -PC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\x86\prefab_config.json  ґ2  ( 2Y +PC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\x86\prefab_config.json  2  ( 2Y W -UC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\x86\symbol_folder_index.txt  ґ2  L 2W +UC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\x86\symbol_folder_index.txt  2  L 2W U -SC:\flutter\src\flutter\packages\flutter_tools\gradle\src\main\groovy\CMakeLists.txt  ґ2  2 \ No newline at end of file +SC:\flutter\src\flutter\packages\flutter_tools\gradle\src\main\groovy\CMakeLists.txt  2  2 \ No newline at end of file diff --git a/android/app/.cxx/Debug/m4rj1019/x86_64/configure_fingerprint.bin b/android/app/.cxx/Debug/m4rj1019/x86_64/configure_fingerprint.bin index 2b50ba2e..2c0d0d45 100644 --- a/android/app/.cxx/Debug/m4rj1019/x86_64/configure_fingerprint.bin +++ b/android/app/.cxx/Debug/m4rj1019/x86_64/configure_fingerprint.bin @@ -2,27 +2,27 @@ C/C++ Structured Loga _ ]C:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\x86_64\additional_project_files.txtC A -?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  2  2^ +?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  ɗ2  2^ \ -ZC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\x86_64\android_gradle_build.json  2 2c +ZC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\x86_64\android_gradle_build.json  ɗ2 2c a -_C:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\x86_64\android_gradle_build_mini.json  2 2P +_C:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\x86_64\android_gradle_build_mini.json  ɗ2 2P N -LC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\x86_64\build.ninja  2 炗2T +LC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\x86_64\build.ninja  ɗ2 炗2T R -PC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\x86_64\build.ninja.txt  2Y +PC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\x86_64\build.ninja.txt  ʗ2Y W -UC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\x86_64\build_file_index.txt  2 S 2Z +UC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\x86_64\build_file_index.txt  ʗ2 S 2Z X -VC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\x86_64\compile_commands.json  2^ +VC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\x86_64\compile_commands.json  ʗ2^ \ -ZC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\x86_64\compile_commands.json.bin  2 d +ZC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\x86_64\compile_commands.json.bin  ʗ2 d b -`C:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\x86_64\metadata_generation_command.txt  2 +`C:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\x86_64\metadata_generation_command.txt  ʗ2  2W U -SC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\x86_64\prefab_config.json  2  ( 2\ +SC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\x86_64\prefab_config.json  ʗ2  ( 2\ Z -XC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\x86_64\symbol_folder_index.txt  2  O 2W +XC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\x86_64\symbol_folder_index.txt  ʗ2  O 2W U -SC:\flutter\src\flutter\packages\flutter_tools\gradle\src\main\groovy\CMakeLists.txt  2  2 \ No newline at end of file +SC:\flutter\src\flutter\packages\flutter_tools\gradle\src\main\groovy\CMakeLists.txt  ʗ2  2 \ No newline at end of file diff --git a/assets/competitiveness/solo.png b/assets/competitiveness/solo.png new file mode 100644 index 0000000000000000000000000000000000000000..96bc34c86e71474730f0e8df3edeaf9d0fc23c57 GIT binary patch literal 4991 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 JPDHLkV1gtOo)`cC literal 0 HcmV?d00001 diff --git a/assets/competitiveness/soloo.png b/assets/competitiveness/soloo.png new file mode 100644 index 0000000000000000000000000000000000000000..408355dc4c0d5d1c7acad1133f8d5e5eb8cf6dfb GIT binary patch literal 2720 zcmV;R3Sae!P)*?|WHZ77{|tN-z)z0fH=&0tIB3B|=@$Vufn8<0;r<9c!nq(^_j=TXl|L)z;do zcxpT2QdH=;0aZb)3xc+StaYhLSQC<%KoasMiP%9-M4dC9isyajymRmU-~aym-hc1= z|9dY07#J8B7#J8B7#J8B7#J8B7=H%vULsolWzHVSJ;sPwa4qJa(kODl`=Uq zlA_&b#!lhoL`8rEfTwt-@rBE_7KK;Upx!GN<_vv)v;aSb4vwBO-8=H!CA7D$e*5Lg zi`gWf^z42%nJLjD^d!0G??R5X`$9g3jH`RJA zp0k>pJ>hlVrD^Yl?a4gJ=kqDU?BE!oUW~X4i+%y4oO>~3zZRuSqnKVFmHj}DOz^PF z+@`F|5w0%XKB(s`%Q%}2c=3C&@j(R%d0;eWCXbb;k9jQlb}w`4-%~krH)Yvnl2x%Q zhp0U1$3Z>|gXCZo0|OR|X0Pz(Z2iz)25xz4EhkCr10I|SL+cLpm!LTJgaYa4(ZM;BvW~grtjO zF)U7KOLJpML`2kkDwXn>R;xJ&L68|m(Et*O>RwTC^0Szj_!Pc?A9?zx@`4wmqgU8^ zKott*rJ9-xhcYv#Ein(6+>amqaameM#!5b$8@7A*&R1v5n7K`%xO2Y0-&o9IakGdN z#H**HyB3CFVrAv2-Ew)xVh)!Z|6}QqH!~+s+i|7#$|@?AN)iaTueP_Vs_=MX5P?9@ z96kEu#^jXrys=})X7#GopBEP&D0TMHBRS0B5W#}gn-qm#&b!~fPkVcNuR*W7=|ZPR z>Gk>n4v#O_^s2A0*=$~GYs>y)$Ns%3C^+;pA79Cu{(dV}tyXvaWq#fXh2qvNrW-SB zLR{Pu9E=y*Ou5l$6q(&7g5V;RcU1fB&PQ+riOnI|DXHmOZGP*luCCf9dm&P6#tY|vUN4dOPrlmJunw55uuiL0 z;BCX$)zx`2Ha32(QmNX<=CEFBX>K~fy7R?F7F}m21mnaubNdjXG>;aQjT-7J zdMT2`xyF-QbIE?9*&Y8}lE;2|<0q8x$;-5-cCKQDPIoh({dyfM=kqVDn%@!nq-A4F z?afM<#?m-F3$99+w7;R|eiMPlVE~!z>Fl!v?;c)2iJ9y!`s75rz3sWQaHnfV zhBtV4dVSL6yR#__4YN5E@`FtoVNh?R?CC5`!z1X7EOZG@<+!|<@jhzmZnmges|Qrq znmMzw_BJhhKV!JAXhZ7-MbW}pw4k)CfzGx&mOib{Hflsh+Tuk$C%0}OFx&%8%~$rK zM6(wodd?!VM%4^aTnLt1zg(k)&qy`YAHQfz*LoNtz=%&|uIk8N(>z`&I;H=$>^oH7 zWuiytEV{ib`vp$Q>J3&?e>Y4dj)PG6z}@Q=eK0~ckV9U2)v9W|ZSK<<$-?nMYkzNx zS=HKao4qY~p4gkf5=QARAHGC%54_v|`_&#=NXC4#;`%{EBul=tcg1T!Sz~xCr`Qn} zRBBol$1(!8AM9$#o6Z`d|HprdNE5^)mbZ8BnVseA+`^A+FLS+5+0;tn`LO%dHxR0S zB4p~grN)tIUg~RyixIMbMjw}&W@xFdL``NQ07ig_B7D`CiqFz~V?t4@717rhA18Rl z`I21R5U9`SW`zlDIK^)&gA3UchYqMoUg7bUo?Ca#{kp3NT^NO0)Xg|oFRrHUP%T56 zlmH-{#?s%5M=zf~i%gss-`8B(MD&ye8E@8AQ$*uaO&zV(M3(nh)M{dBuAV8eIi>4y zodR)QUNjXE3Il-U#;*iAp4GOtpa?t|q=xdxBJU~jz+j9Z`+wLSnUEuww6-9Jgzo+5 zTmG~c1HfP`p!r9P8Di8~N8kzM&m1GYC=N)aCQ(dKoO;Heb;`Xa?8!lb?1P8 zGE*RbWe*H>m{DzOElkn_nja;KmrP4(Ehvw^@m0P3V95&jfC7}j=(jvNvGLRDGd7t8 zJO|)-b92L^YraE4LIR$jB=Q9J97(*dKn@P}a7~R64LxM?m@SKpsmN`$A5R8JSwN7`nq2_Or72Pql-7cTGKAwO1FE=0|?9(Ld$YMjVju1B1UE zNh%YvGiOiWzdUOKGcJ6rUBfV90a!s15V- zi~fbfs|^G?EFtl!5&*i}y3bU+-MRl*6?pnt>6zrYIibhEz`(%3z`(%3z`(%3z`(%x a-}w(@deOmWS`N$r0000; + return ReportDetailPage(report: report); + }, + ), + GoRoute( path: '/marriages', builder: (context, state) => Marriages(), diff --git a/lib/presentation/Screens/Bottom Navigation Pages/Competitiveness/Detailedcompetitiveness.dart b/lib/presentation/Screens/Bottom Navigation Pages/Competitiveness/Detailedcompetitiveness.dart new file mode 100644 index 00000000..135866a3 --- /dev/null +++ b/lib/presentation/Screens/Bottom Navigation Pages/Competitiveness/Detailedcompetitiveness.dart @@ -0,0 +1,222 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:uae_stat/domain/use_cases/language.dart'; +import 'package:uae_stat/presentation/routes/drawer_routes/custom_drawer_routes.dart'; + +class ReportDetailPage extends StatelessWidget { + final Map report; + + const ReportDetailPage({super.key, required this.report}); + + @override + Widget build(BuildContext context) { + double width = MediaQuery.of(context).size.width; + + return BaseScaffold( + title: Text( + context.translate('UAE Competitiveness', 'القدرة التنافسية للإمارات'), // Add localization + style: TextStyle( + fontFamily: context.translate('Roboto', 'NotoKufi'), + ), + ), + hasDrawer: false, + leading: IconButton( + icon: const Icon( + Icons.arrow_back_ios, + color: Colors.black, // Ensure visibility + ), + onPressed: () => Navigator.of(context).pop(), + ), + body: SingleChildScrollView( + padding: const EdgeInsets.all(16.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + // Header Section: Report Title and Image + Center( + child: Column( + children: [ + Image.asset( + 'assets/competitiveness/solo.png', + height: 80, // Increase size for prominence + ), + const SizedBox(height: 8), + Text( + context.translate('Prosperity Index (2023)', 'مؤشر الازدهار (2023)'), + style: const TextStyle( + fontSize: 22, + fontWeight: FontWeight.bold, + ), + ), + ], + ), + ), + const SizedBox(height: 24), + + // Description Section + Text( + context.translate( + "The Legatum Prosperity Index is published annually by the Legatum Institute. It is a policy-focused report that measures the current state of prosperity since 2007. Using the Prosperity Index framework, nations around the world can assess their strengths and weaknesses in order to determine the economic and strategic choices that need to be made to further build inclusive societies, open economies, and empowered people to drive greater levels of prosperity.", + "يُنشر مؤشر الازدهار الليجاتوم سنويًا من قبل معهد ليجاتوم. إنه تقرير يركز على السياسات ويقيس الحالة الحالية للازدهار منذ عام 2007. باستخدام إطار مؤشر الازدهار، يمكن للدول حول العالم تقييم نقاط قوتها وضعفها لتحديد الخيارات الاقتصادية والاستراتيجية التي يجب اتخاذها لتعزيز بناء مجتمعات شاملة واقتصادات مفتوحة وتمكين الأفراد لدفع مستويات أعلى من الازدهار.", + ), + style: const TextStyle(fontSize: 14), + ), + const SizedBox(height: 24), + + // Ranking Section (Using LeaderCard-like styling) + Wrap( + spacing: 16, + runSpacing: 16, + alignment: WrapAlignment.center, + children: [ + _RankingCard( + title: context.translate('Rank in 2023', 'الترتيب في 2023'), + value: "44", + icon: const Icon(Icons.arrow_downward, color: Colors.red, size: 16), + ), + _RankingCard( + title: context.translate('vs. Previous Edition', 'مقارنة بالإصدار السابق'), + value: "41", + icon: const SizedBox.shrink(), // No icon for this + ), + ], + ), + const SizedBox(height: 24), + + // Country Rankings Section (Using CategoryButton-like styling) + // Wrap( + // spacing: 16, + // runSpacing: 16, + // alignment: WrapAlignment.center, + // children: [ + // _CountryRankingButton( + // title: context.translate('First Globally: DENMARK', 'الأول عالميًا: الدنمارك'), + // imagePath: 'assets/flags/denmark.png', + // color: const Color(0xFFD7C1AF), + // ), + // _CountryRankingButton( + // title: context.translate('First in GCC: MULTIPLE COUNTRIES', 'الأول في دول الخليج: دول متعددة'), + // imagePath: null, // No specific flag + // color: const Color(0xFFAEC6CF), + // ), + // _CountryRankingButton( + // title: context.translate('First in Arab Countries: UAE', 'الأول في الدول العربية: الإمارات'), + // imagePath: 'assets/flags/uae.png', + // color: const Color(0xFFD7AFAF), + // ), + // ], + // ), + ], + ), + ), + ); + } +} + +// Ranking Card (similar to _LeaderCard) +class _RankingCard extends StatelessWidget { + final String title; + final String value; + final Widget icon; + + const _RankingCard({ + Key? key, + required this.title, + required this.value, + required this.icon, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return SizedBox( + width: 160, + child: Container( + padding: const EdgeInsets.all(12), + decoration: BoxDecoration( + color: Colors.grey[100], + borderRadius: BorderRadius.circular(12), + ), + child: Column( + children: [ + Text( + title, + textAlign: TextAlign.center, + style: const TextStyle( + fontSize: 13, + color: Colors.black54, + ), + ), + const SizedBox(height: 4), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + value, + textAlign: TextAlign.center, + style: const TextStyle( + fontSize: 24, + fontWeight: FontWeight.bold, + ), + ), + const SizedBox(width: 4), + icon, + ], + ), + ], + ), + ), + ); + } +} + +// Country Ranking Button (similar to _CategoryButton) +class _CountryRankingButton extends StatelessWidget { + final String title; + final String? imagePath; + final Color color; + + const _CountryRankingButton({ + Key? key, + required this.title, + required this.imagePath, + required this.color, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return Container( + width: 160, + height: 70, + decoration: BoxDecoration( + color: color, + borderRadius: BorderRadius.circular(16), + ), + alignment: Alignment.center, + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + if (imagePath != null) ...[ + Image.asset( + imagePath!, + width: 24, + height: 24, + ), + const SizedBox(width: 8), + ], + Flexible( + child: Text( + title, + style: const TextStyle( + color: Colors.white, + fontWeight: FontWeight.bold, + fontSize: 14, + ), + textAlign: TextAlign.center, + overflow: TextOverflow.ellipsis, + ), + ), + ], + ), + ); + } +} \ No newline at end of file diff --git a/lib/presentation/Screens/Bottom Navigation Pages/Competitiveness/competitiveness.dart b/lib/presentation/Screens/Bottom Navigation Pages/Competitiveness/competitiveness.dart index 6cd9b039..6f0e331b 100644 --- a/lib/presentation/Screens/Bottom Navigation Pages/Competitiveness/competitiveness.dart +++ b/lib/presentation/Screens/Bottom Navigation Pages/Competitiveness/competitiveness.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; +import 'package:uae_stat/domain/use_cases/language.dart'; import 'package:uae_stat/presentation/routes/drawer_routes/custom_drawer_routes.dart'; class Competitiveness extends StatelessWidget { @@ -14,7 +15,18 @@ class Competitiveness extends StatelessWidget { context.go('/myhomepage'); }, child: BaseScaffold( - title: Center(child: Text("UAE Competitiveness")), + title: Text( + context.translate( + 'UAE Competitiveness', + 'تنافسية دولة الإمارات العربية المتحدة', + ), + style: TextStyle( + fontFamily: context.translate( + 'Roboto', + 'NotoKufi', + ) + ), + ), body: CompetitivenessState(context), ), ); @@ -25,49 +37,49 @@ class Competitiveness extends StatelessWidget { { 'rank': 44, 'title': 'Prosperity Index (2023)', - 'logo': 'assets/backgrounds/share/fcsc.svg', + 'logo': 'assets/competitiveness/solo.png', 'borderColor': Colors.blue, }, { 'rank': 26, 'title': 'World Happiness Report (2023)', - 'logo': 'assets/backgrounds/share/fcsc.svg', + 'logo': 'assets/competitiveness/soloo.png', 'borderColor': Color(0xFF844F36), }, { 'rank': 7, 'title': 'Logistics Performance Index (2023)', - 'logo': 'assets/backgrounds/share/fcsc.svg', + 'logo': 'assets/competitiveness/solo.png', 'borderColor': Colors.blue, }, { 'rank': 10, 'title': 'Global Soft Power Index (2023)', - 'logo': 'assets/backgrounds/share/fcsc.svg', + 'logo': 'assets/competitiveness/soloo.png', 'borderColor': Colors.blue, }, { 'rank': 76, 'title': 'Global Terrorism Index (2023)', - 'logo': 'assets/backgrounds/share/fcsc.svg', + 'logo': 'assets/competitiveness/solo.png', 'borderColor': Color(0xFF844F36), }, { 'rank': 10, 'title': 'The World Competitiveness Yearbook (2023)', - 'logo': 'assets/backgrounds/share/fcsc.svg', + 'logo': 'assets/competitiveness/soloo.png', 'borderColor': Colors.blue, }, { 'rank': 71, 'title': 'Global Gender Gap Report (2023)', - 'logo': 'assets/backgrounds/share/fcsc.svg', + 'logo': 'assets/competitiveness/solo.png', 'borderColor': Colors.blue, }, { 'rank': 29, 'title': 'Competitive Industrial Performance Index (2023)', - 'logo': 'assets/backgrounds/share/fcsc.svg', + 'logo': 'assets/competitiveness/soloo.png', 'borderColor': Color(0xFF844F36), }, ]; @@ -87,42 +99,52 @@ class Competitiveness extends StatelessWidget { final report = reports[index]; return Padding( padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 6), - child: Container( - decoration: BoxDecoration( - border: Border.all(color: report['borderColor']), - borderRadius: BorderRadius.circular(12), - ), - padding: const EdgeInsets.symmetric(vertical: 12, horizontal: 16), - child: Row( - children: [ - Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text( - 'Rank', - style: TextStyle(fontSize: 12, color: Colors.grey[600]), - ), - Text( - '${report['rank']}', - style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold), - ), - ], - ), - SizedBox(width: 12), - Expanded( - child: Text( - report['title'], - style: TextStyle(fontSize: 14, fontWeight: FontWeight.w500), + child: InkWell( + onTap: () { + // Navigate to detail page with arguments + context.push('/reportDetail', extra: report); + }, + child: Container( + decoration: BoxDecoration( + border: Border.all(color: report['borderColor']), + borderRadius: BorderRadius.circular(12), + ), + padding: const EdgeInsets.symmetric(vertical: 12, horizontal: 16), + child: Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + 'Rank', + style: TextStyle(fontSize: 12, color: Colors.grey[600]), + ), + Text( + '${report['rank']}', + style: const TextStyle(fontSize: 20, fontWeight: FontWeight.bold), + ), + ], ), - ), - SizedBox(width: 4), - Image.asset( - report['logo'], - width: 10, - height: 10, - fit: BoxFit.contain, - ), - ], + const SizedBox(width: 12), + Expanded( + child: Text( + report['title'], + style: const TextStyle(fontSize: 14, fontWeight: FontWeight.w500), + ), + ), + const SizedBox(width: 8), + Container( + height: 58, + width: 69, + alignment: Alignment.center, + child: Image.asset( + report['logo'], + fit: BoxFit.fitHeight, + ), + ), + ], + ), ), ), ); diff --git a/lib/presentation/Screens/Bottom Navigation Pages/Country_Profile/DetailedCountryProfilePage.dart b/lib/presentation/Screens/Bottom Navigation Pages/Country_Profile/DetailedCountryProfilePage.dart index ca3fa9ee..e74582d4 100644 --- a/lib/presentation/Screens/Bottom Navigation Pages/Country_Profile/DetailedCountryProfilePage.dart +++ b/lib/presentation/Screens/Bottom Navigation Pages/Country_Profile/DetailedCountryProfilePage.dart @@ -21,7 +21,7 @@ class DetailedCountryProfilePage extends StatelessWidget { return BaseScaffold( title: const Text('Country Profile'), hasDrawer: false, - leading: const BackButton(), + showBackButton: true, body: SingleChildScrollView( child: Padding( padding: const EdgeInsets.all(16.0), @@ -77,31 +77,52 @@ class DetailedCountryProfilePage extends StatelessWidget { ], ), const SizedBox(height: 24), - Wrap( - spacing: 16, - runSpacing: 16, - alignment: WrapAlignment.center, + Column( + crossAxisAlignment: CrossAxisAlignment.stretch, children: [ - _CategoryButton( - title: 'Demography', - color: const Color(0xFFD7C1AF), - onTap: () => showCategoryPopup(context, 'Demography'), + Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + Expanded( + child: _CategoryButton( + title: 'Demography', + color: const Color(0xFFD7C1AF), + onTap: () => showCategoryPopup(context, 'Demography'), + ), + ), + const SizedBox(width: 16), + Expanded( + child: _CategoryButton( + title: 'GDP', + color: const Color(0xFFAEC6CF), + onTap: () => showCategoryPopup(context, 'GDP'), + ), + ), + ], ), - _CategoryButton( - title: 'GDP', - color: const Color(0xFFAEC6CF), - onTap: () => showCategoryPopup(context, 'GDP'), - ), - _CategoryButton( - title: 'FDI', - color: const Color(0xFFD7AFAF), - onTap: () => showCategoryPopup(context, 'FDI'), - ), - _CategoryButton( - title: 'Trade', - color: const Color(0xFFAFCFAF), - onTap: () => showCategoryPopup(context, 'Trade'), + const SizedBox(height: 16), + Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: [ + Expanded( + child: _CategoryButton( + title: 'FDI', + color: const Color(0xFFD7AFAF), + onTap: () => showCategoryPopup(context, 'FDI'), + ), + ), + const SizedBox(width: 16), + Expanded( + child: _CategoryButton( + title: 'Trade', + color: const Color(0xFFAFCFAF), + onTap: () => showCategoryPopup(context, 'Trade'), + ), + ), + ], ), + const SizedBox(height: 16), + // Full-width button _CategoryButton( title: 'Bilateral Trade', color: const Color(0xFF9FAFCF), @@ -109,6 +130,8 @@ class DetailedCountryProfilePage extends StatelessWidget { ), ], ) + + ], ), ), @@ -235,32 +258,31 @@ class _CategoryButton extends StatelessWidget { final VoidCallback onTap; const _CategoryButton({ - Key? key, + super.key, required this.title, required this.color, required this.onTap, - }) : super(key: key); + }); @override Widget build(BuildContext context) { return GestureDetector( onTap: onTap, child: Container( - width: 178.34, - height: 112.59, + height: 100, + width: double.infinity, // This ensures full width decoration: BoxDecoration( color: color, - borderRadius: BorderRadius.circular(20), + borderRadius: BorderRadius.circular(12), ), alignment: Alignment.center, child: Text( title, style: const TextStyle( + fontSize: 16, color: Colors.white, fontWeight: FontWeight.bold, - fontSize: 16, ), - textAlign: TextAlign.center, ), ), ); @@ -277,6 +299,7 @@ class CategoryPopupContent extends StatelessWidget { case 'Demography': return Column( mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.center, children: [ const SizedBox(height: 8), Container( @@ -288,45 +311,54 @@ class CategoryPopupContent extends StatelessWidget { ), ), const SizedBox(height: 16), - const Text( - 'GDP Overview', - style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold), - ), - const SizedBox(height: 16), - _GDPItem( - title: '2021 Nominal GDP (AED)', - value: '1.8 T', - rank: '26', + + _DemographyItem( + icon: Icons.location_city, + title: 'Capital City', + value: 'Buenos Aires', ), Divider(), - _GDPItem( - title: '2021 Real GDP (AED)', - value: '2.08 T', - rank: '22', + + _DemographyItem( + icon: Icons.map, + title: 'Surface Area', + value: '2,780,400 sq. km', ), Divider(), - _GDPItem( - title: '2021 GDP Per Capita (AED)', - value: '39.38 K', - rank: '64', + + _DemographyStatItem( + icon: Icons.groups, + title: '2021 Population', + value: '45.81 M', + suffix: '32 ↑ Rank', + suffixStyle: const TextStyle(color: Colors.green, fontSize: 12), ), Divider(), - const SizedBox(height: 8), - const Text( - 'Income Level', - style: TextStyle(color: Colors.grey), + + _DemographyStatItem( + icon: Icons.male, + title: '2021 Male Population', + value: '22.35 M', + suffix: '0.98% ↑ Growth Rate', + valueColor: Colors.deepPurple, ), - const SizedBox(height: 4), - const Text( - 'Upper Middle Income', - style: TextStyle(fontWeight: FontWeight.bold, fontSize: 16), + Divider(), + + _DemographyStatItem( + icon: Icons.female, + title: '2021 Female Population', + value: '23.46 M', + suffix: '0.93% ↑ Growth Rate', + valueColor: Colors.purple, ), + const SizedBox(height: 16), ], ); case 'GDP': return Column( mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.center, children: [ const SizedBox(height: 8), Container( @@ -338,30 +370,40 @@ class CategoryPopupContent extends StatelessWidget { ), ), const SizedBox(height: 16), - const Text( - 'GDP Overview', - style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold), - ), - const SizedBox(height: 16), - _GDPItem( + + _GDPMetricItem( + icon: Icons.apartment, title: '2021 Nominal GDP (AED)', value: '1.8 T', rank: '26', + rankDirection: '↓', + rankColor: Colors.red, ), Divider(), - _GDPItem( + + _GDPMetricItem( + icon: Icons.public, title: '2021 Real GDP (AED)', value: '2.08 T', rank: '22', + rankDirection: '↓', + rankColor: Colors.red, ), Divider(), - _GDPItem( + + _GDPMetricItem( + icon: Icons.groups_3, title: '2021 GDP Per Capita (AED)', value: '39.38 K', rank: '64', + rankDirection: '↓', + rankColor: Colors.red, ), Divider(), + const SizedBox(height: 8), + Icon(Icons.stacked_bar_chart, color: Colors.grey), + const SizedBox(height: 4), const Text( 'Income Level', style: TextStyle(color: Colors.grey), @@ -377,6 +419,7 @@ class CategoryPopupContent extends StatelessWidget { case 'FDI': return Column( mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.center, children: [ const SizedBox(height: 8), Container( @@ -388,38 +431,31 @@ class CategoryPopupContent extends StatelessWidget { ), ), const SizedBox(height: 16), - const Text( - 'GDP Overview', - style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold), - ), - const SizedBox(height: 16), - _GDPItem( - title: '2021 Nominal GDP (AED)', - value: '1.8 T', - rank: '26', + + _FDIItem( + icon: Icons.trending_down, + title: '2020 FDI Outflows (AED)', + value: '4.75 B', + growthRate: '-15.94%', + isPositive: false, ), Divider(), - _GDPItem( - title: '2021 Real GDP (AED)', - value: '2.08 T', - rank: '22', + + _FDIItem( + icon: Icons.swap_horizontal_circle_outlined, + title: '2020 FDI Inflows (AED)', + value: '14.75 B', + growthRate: '-39.68%', + isPositive: false, ), Divider(), - _GDPItem( - title: '2021 GDP Per Capita (AED)', - value: '39.38 K', - rank: '64', - ), - Divider(), - const SizedBox(height: 8), - const Text( - 'Income Level', - style: TextStyle(color: Colors.grey), - ), - const SizedBox(height: 4), - const Text( - 'Upper Middle Income', - style: TextStyle(fontWeight: FontWeight.bold, fontSize: 16), + + _FDIItem( + icon: Icons.thumb_up_alt_outlined, + title: '2021 FDI Stocks (AED)', + value: '18.98 B', + growthRate: '89.75%', + isPositive: true, ), const SizedBox(height: 16), ], @@ -427,6 +463,7 @@ class CategoryPopupContent extends StatelessWidget { case 'Trade': return Column( mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.center, children: [ const SizedBox(height: 8), Container( @@ -438,38 +475,31 @@ class CategoryPopupContent extends StatelessWidget { ), ), const SizedBox(height: 16), - const Text( - 'GDP Overview', - style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold), - ), - const SizedBox(height: 16), - _GDPItem( - title: '2021 Nominal GDP (AED)', - value: '1.8 T', - rank: '26', + + _TradeItem( + icon: Icons.cached, + title: '2021 Total Trade (AED)', + value: '603 B', + growthRate: '39.89%', + isPositive: true, ), Divider(), - _GDPItem( - title: '2021 Real GDP (AED)', - value: '2.08 T', - rank: '22', + + _TradeItem( + icon: Icons.download_outlined, + title: '2021 Imports (AED)', + value: '272.9 B', + growthRate: '40.79%', + isPositive: true, ), Divider(), - _GDPItem( - title: '2021 GDP Per Capita (AED)', - value: '39.38 K', - rank: '64', - ), - Divider(), - const SizedBox(height: 8), - const Text( - 'Income Level', - style: TextStyle(color: Colors.grey), - ), - const SizedBox(height: 4), - const Text( - 'Upper Middle Income', - style: TextStyle(fontWeight: FontWeight.bold, fontSize: 16), + + _TradeItem( + icon: Icons.upload_outlined, + title: '2021 Exports (AED)', + value: '330.1 B', + growthRate: '39.15%', + isPositive: true, ), const SizedBox(height: 16), ], @@ -477,50 +507,56 @@ class CategoryPopupContent extends StatelessWidget { case 'Bilateral Trade': return Column( mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, children: [ const SizedBox(height: 8), - Container( - width: 50, - height: 5, - decoration: BoxDecoration( - color: Colors.grey[300], - borderRadius: BorderRadius.circular(10), + Center( + child: Container( + width: 50, + height: 5, + decoration: BoxDecoration( + color: Colors.grey[300], + borderRadius: BorderRadius.circular(10), + ), ), ), const SizedBox(height: 16), - const Text( - 'GDP Overview', - style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold), + const Center( + child: Text( + 'UAE Bilateral Trade (2022)', + style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold), + ), + ), + const SizedBox(height: 8), + const Center( + child: Text( + 'Total \$472.5M', + style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold), + ), ), const SizedBox(height: 16), - _GDPItem( - title: '2021 Nominal GDP (AED)', - value: '1.8 T', - rank: '26', + Row( + mainAxisAlignment: MainAxisAlignment.spaceEvenly, + children: const [ + _BilateralTradeValueBox(label: 'Total Import', value: '\$390.2M', color: Color(0xFF00B292)), + _BilateralTradeValueBox(label: 'Total Export', value: '\$42.2M', color: Color(0xFFDE4D86)), + _BilateralTradeValueBox(label: 'Total ReExport', value: '\$40.2M', color: Color(0xFF4D52A1)), + ], ), - Divider(), - _GDPItem( - title: '2021 Real GDP (AED)', - value: '2.08 T', - rank: '22', - ), - Divider(), - _GDPItem( - title: '2021 GDP Per Capita (AED)', - value: '39.38 K', - rank: '64', - ), - Divider(), - const SizedBox(height: 8), - const Text( - 'Income Level', - style: TextStyle(color: Colors.grey), - ), - const SizedBox(height: 4), - const Text( - 'Upper Middle Income', - style: TextStyle(fontWeight: FontWeight.bold, fontSize: 16), + const SizedBox(height: 24), + const Center( + child: Text( + 'Top 5 Import Commodities', + style: TextStyle( + fontSize: 16, fontWeight: FontWeight.bold, color: Color(0xFF4FBFA8)), + ), ), + const SizedBox(height: 12), + _CommodityRow(icon: Icons.eco, label: 'Vegetable Products', value: '\$198.6M'), + _CommodityRow(icon: Icons.liquor, label: 'Foodstuffs, Beverages, Spirits And Tobacco', value: '\$89.9M'), + _CommodityRow(icon: Icons.build, label: 'Base Metals And Articles Of Base Metal', value: '\$65.6M'), + _CommodityRow(icon: Icons.pets, label: 'Live Animals And Their Products', value: '\$23.7M'), + _CommodityRow(icon: Icons.science, label: 'Products Of The Chemical or Allied Industries', value: '\$4.7M'), const SizedBox(height: 16), ], ); @@ -531,14 +567,239 @@ class CategoryPopupContent extends StatelessWidget { } } } +Widget _DemographyItem({ + required IconData icon, + required String title, + required String value, +}) { + return Column( + children: [ + Icon(icon, size: 32, color: Colors.grey), + const SizedBox(height: 4), + Text(title, style: const TextStyle(color: Colors.grey)), + const SizedBox(height: 4), + Text( + value, + style: const TextStyle(fontWeight: FontWeight.bold, fontSize: 16), + textAlign: TextAlign.center, + ), + ], + ); +} +Widget _DemographyStatItem({ + required IconData icon, + required String title, + required String value, + String? suffix, + TextStyle? suffixStyle, + Color? valueColor, +}) { + return Column( + children: [ + Icon(icon, size: 32, color: Colors.grey), + const SizedBox(height: 4), + Text(title, style: const TextStyle(color: Colors.grey)), + const SizedBox(height: 4), + RichText( + textAlign: TextAlign.center, + text: TextSpan( + children: [ + TextSpan( + text: '$value ', + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 16, + color: valueColor ?? Colors.black, + ), + ), + if (suffix != null) + TextSpan( + text: suffix, + style: suffixStyle ?? + const TextStyle(fontSize: 12, color: Colors.green), + ), + ], + ), + ), + ], + ); +} +Widget _GDPMetricItem({ + required IconData icon, + required String title, + required String value, + required String rank, + required String rankDirection, + required Color rankColor, +}) { + return Column( + children: [ + Icon(icon, size: 32, color: Colors.grey), + const SizedBox(height: 4), + Text(title, style: const TextStyle(color: Colors.grey)), + const SizedBox(height: 4), + RichText( + textAlign: TextAlign.center, + text: TextSpan( + children: [ + TextSpan( + text: '$value ', + style: const TextStyle( + fontWeight: FontWeight.bold, + fontSize: 18, + color: Colors.black, + ), + ), + TextSpan( + text: '$rank $rankDirection\n', + style: TextStyle( + fontSize: 12, + color: rankColor, + ), + ), + const TextSpan( + text: 'Rank', + style: TextStyle(fontSize: 10, color: Colors.grey), + ), + ], + ), + ), + ], + ); +} +Widget _FDIItem({ + required IconData icon, + required String title, + required String value, + required String growthRate, + required bool isPositive, +}) { + return Column( + children: [ + Icon(icon, size: 32, color: Colors.grey), + const SizedBox(height: 4), + Text(title, style: const TextStyle(color: Colors.grey)), + const SizedBox(height: 4), + Text( + value, + style: const TextStyle( + fontWeight: FontWeight.bold, + fontSize: 18, + color: Colors.black, + ), + ), + const SizedBox(height: 2), + Text( + '$growthRate Growth Rate', + style: TextStyle( + color: isPositive ? Colors.green : Colors.red, + fontSize: 12, + ), + ), + ], + ); +} +Widget _TradeItem({ + required IconData icon, + required String title, + required String value, + required String growthRate, + required bool isPositive, +}) { + return Column( + children: [ + Icon(icon, size: 32, color: Colors.grey), + const SizedBox(height: 4), + Text(title, style: const TextStyle(color: Colors.grey)), + const SizedBox(height: 4), + Text( + value, + style: const TextStyle( + fontWeight: FontWeight.bold, + fontSize: 18, + color: Colors.black, + ), + ), + const SizedBox(height: 2), + Text( + '$growthRate Growth Rate', + style: TextStyle( + color: isPositive ? Colors.green : Colors.red, + fontSize: 12, + ), + ), + ], + ); +} +class _BilateralTradeValueBox extends StatelessWidget { + final String label; + final String value; + final Color color; + + const _BilateralTradeValueBox({ + required this.label, + required this.value, + required this.color, + }); + + @override + Widget build(BuildContext context) { + return Container( + padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8), + decoration: BoxDecoration( + color: color.withOpacity(0.1), + borderRadius: BorderRadius.circular(10), + border: Border.all(color: color), + ), + child: Column( + children: [ + Text( + label, + style: TextStyle(fontSize: 12, color: color), + ), + const SizedBox(height: 4), + Text( + value, + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 14, + color: color, + ), + ), + ], + ), + ); + } +} + +Widget _CommodityRow({ + required IconData icon, + required String label, + required String value, +}) { + return Padding( + padding: const EdgeInsets.symmetric(vertical: 6, horizontal: 12), + child: Row( + children: [ + Icon(icon, size: 20, color: Colors.grey[600]), + const SizedBox(width: 12), + Expanded( + child: Text(label, style: const TextStyle(fontSize: 14)), + ), + Text(value, style: const TextStyle(fontWeight: FontWeight.bold, color: Colors.teal)), + ], + ), + ); +} //pop-up void showCategoryPopup(BuildContext context, String category) { showDialog( context: context, - barrierColor: Colors.black.withOpacity(0.3), // semi-transparent background + barrierColor: Colors.black.withOpacity(0.3), builder: (context) => BackdropFilter( - filter: ImageFilter.blur(sigmaX: 5, sigmaY: 5), // blur effect + filter: ImageFilter.blur(sigmaX: 5, sigmaY: 5), child: Dialog( + backgroundColor: Colors.white, insetPadding: const EdgeInsets.symmetric(horizontal: 20, vertical: 40), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(16), @@ -552,3 +813,4 @@ void showCategoryPopup(BuildContext context, String category) { ); } + diff --git a/pubspec.lock b/pubspec.lock index b5badaf0..94289d50 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -109,18 +109,18 @@ packages: dependency: transitive description: name: async - sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" + sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63 url: "https://pub.dev" source: hosted - version: "2.11.0" + version: "2.12.0" boolean_selector: dependency: transitive description: name: boolean_selector - sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.2" boxy: dependency: "direct main" description: @@ -197,10 +197,10 @@ packages: dependency: transitive description: name: characters - sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" + sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803 url: "https://pub.dev" source: hosted - version: "1.3.0" + version: "1.4.0" checked_yaml: dependency: transitive description: @@ -229,10 +229,10 @@ packages: dependency: transitive description: name: clock - sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b url: "https://pub.dev" source: hosted - version: "1.1.1" + version: "1.1.2" code_builder: dependency: transitive description: @@ -245,10 +245,10 @@ packages: dependency: transitive description: name: collection - sha256: a1ace0a119f20aabc852d165077c036cd864315bd99b7eaa10a60100341941bf + sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" url: "https://pub.dev" source: hosted - version: "1.19.0" + version: "1.19.1" community_charts_common: dependency: transitive description: @@ -460,10 +460,10 @@ packages: dependency: transitive description: name: fake_async - sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + sha256: "6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc" url: "https://pub.dev" source: hosted - version: "1.3.1" + version: "1.3.2" fast_immutable_collections: dependency: "direct main" description: @@ -1008,18 +1008,18 @@ packages: dependency: transitive description: name: leak_tracker - sha256: "7bb2830ebd849694d1ec25bf1f44582d6ac531a57a365a803a6034ff751d2d06" + sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec url: "https://pub.dev" source: hosted - version: "10.0.7" + version: "10.0.8" leak_tracker_flutter_testing: dependency: transitive description: name: leak_tracker_flutter_testing - sha256: "9491a714cca3667b60b5c420da8217e6de0d1ba7a5ec322fab01758f6998f379" + sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573 url: "https://pub.dev" source: hosted - version: "3.0.8" + version: "3.0.9" leak_tracker_testing: dependency: transitive description: @@ -1064,10 +1064,10 @@ packages: dependency: transitive description: name: matcher - sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb + sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2 url: "https://pub.dev" source: hosted - version: "0.12.16+1" + version: "0.12.17" material_charts: dependency: "direct main" description: @@ -1088,10 +1088,10 @@ packages: dependency: transitive description: name: meta - sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7 + sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c url: "https://pub.dev" source: hosted - version: "1.15.0" + version: "1.16.0" mime: dependency: transitive description: @@ -1144,10 +1144,10 @@ packages: dependency: transitive description: name: path - sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" + sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" url: "https://pub.dev" source: hosted - version: "1.9.0" + version: "1.9.1" path_parsing: dependency: transitive description: @@ -1467,10 +1467,10 @@ packages: dependency: transitive description: name: source_span - sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" + sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c" url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.10.1" sprintf: dependency: transitive description: @@ -1483,10 +1483,10 @@ packages: dependency: transitive description: name: stack_trace - sha256: "9f47fd3630d76be3ab26f0ee06d213679aa425996925ff3feffdec504931c377" + sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1" url: "https://pub.dev" source: hosted - version: "1.12.0" + version: "1.12.1" state_notifier: dependency: transitive description: @@ -1499,10 +1499,10 @@ packages: dependency: transitive description: name: stream_channel - sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 + sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.4" stream_transform: dependency: transitive description: @@ -1515,26 +1515,26 @@ packages: dependency: transitive description: name: string_scanner - sha256: "688af5ed3402a4bde5b3a6c15fd768dbf2621a614950b17f04626c431ab3c4c3" + sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" url: "https://pub.dev" source: hosted - version: "1.3.0" + version: "1.4.1" term_glyph: dependency: transitive description: name: term_glyph - sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.2.2" test_api: dependency: transitive description: name: test_api - sha256: "664d3a9a64782fcdeb83ce9c6b39e78fd2971d4e37827b9b06c3aa1edc5e760c" + sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd url: "https://pub.dev" source: hosted - version: "0.7.3" + version: "0.7.4" the_validator: dependency: "direct main" description: @@ -1723,10 +1723,10 @@ packages: dependency: transitive description: name: vm_service - sha256: f6be3ed8bd01289b34d679c2b62226f63c0e69f9fd2e50a6b3c1c729a961041b + sha256: "0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14" url: "https://pub.dev" source: hosted - version: "14.3.0" + version: "14.3.1" watcher: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index bb428ca8..6faac86d 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -123,6 +123,7 @@ flutter: - assets/backgrounds/from_alsaray/ - assets/country_flags/ - assets/country-profile/ + - assets/competitiveness/ - assets/cached_responses/informatica/ - assets/cached_responses/sharepoint/ - assets/cached_responses/qlik/