competitiveness

This commit is contained in:
Juki-shiba 2025-06-05 18:10:58 +05:30
parent 8410ab2d5b
commit e994e8e5e0
12 changed files with 800 additions and 284 deletions

View File

@ -2,27 +2,27 @@ C/C++ Structured Logd
b b
`C:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\arm64-v8a\additional_project_files.txtC `C:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\arm64-v8a\additional_project_files.txtC
A A
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  ø<EFBFBD>™¬ó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  ø<EFBFBD>™¬ó2¼ ì¶•šì2f ]C:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\arm64-v8a\android_gradle_build.json  ßìœýó2¼ ì¶•šì2f
d d
bC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\arm64-v8a\android_gradle_build_mini.json  ø<EFBFBD>™¬ó2<18> ‡·•šì2S bC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\arm64-v8a\android_gradle_build_mini.json  ßìœýó2<18> ‡·•šì2S
Q Q
OC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\arm64-v8a\build.ninja  ø<EFBFBD>™¬ó2üÛ ³³•šì2W OC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\arm64-v8a\build.ninja  ßìœýó2üÛ ³³•šì2W
U U
SC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\arm64-v8a\build.ninja.txt  ø<EFBFBD>™¬ó2\ SC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\arm64-v8a\build.ninja.txt  ßìœýó2\
Z Z
XC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\arm64-v8a\build_file_index.txt  ø<EFBFBD>™¬ó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  ø<EFBFBD>™¬ó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  ø<EFBFBD>™¬ó2 g ]C:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\arm64-v8a\compile_commands.json.bin  àìœýó2 g
e e
cC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\arm64-v8a\metadata_generation_command.txt  ø<EFBFBD>™¬ó2 cC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\arm64-v8a\metadata_generation_command.txt  àìœýó2
Ç “·•šì2Z Ç “·•šì2Z
X X
VC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\arm64-v8a\prefab_config.json  ø<EFBFBD>™¬ó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  ø<EFBFBD>™¬ó2  R ¨·•šì2W [C:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\arm64-v8a\symbol_folder_index.txt  àìœýó2  R ¨·•šì2W
U U
SC:\flutter\src\flutter\packages\flutter_tools\gradle\src\main\groovy\CMakeLists.txt  ø<EFBFBD>™¬ó2 § ÑÜÐßÓ2 SC:\flutter\src\flutter\packages\flutter_tools\gradle\src\main\groovy\CMakeLists.txt  àìœýó2 § ÑÜÐßÓ2

View File

@ -2,27 +2,27 @@ C/C++ Structured Logf
d d
bC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\armeabi-v7a\additional_project_files.txtC bC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\armeabi-v7a\additional_project_files.txtC
A A
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  ³‘™¬ó2  Úšì2c ?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  å<EFBFBD>ýó2  Úšì2c
a 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  æ<EFBFBD>ýó2À ìšì2h
f 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  æ<EFBFBD>ýó2 õ—šì2U
S 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  æ<EFBFBD>ýó2†Ü ì2Y
W 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  æ<EFBFBD>ýó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  æ<EFBFBD>ýó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  æ<EFBFBD>ýó2c
a 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  æ<EFBFBD>ýó2 i
g 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  æ<EFBFBD>ýó2
Ñ טšì2\ Ñ טšì2\
Z 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  æ<EFBFBD>ýó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  æ<EFBFBD>ýó2  T ¾™šì2W
U U
SC:\flutter\src\flutter\packages\flutter_tools\gradle\src\main\groovy\CMakeLists.txt  ³‘™¬ó2 § ÑÜÐßÓ2 SC:\flutter\src\flutter\packages\flutter_tools\gradle\src\main\groovy\CMakeLists.txt  æ<EFBFBD>ýó2 § ÑÜÐßÓ2

View File

@ -2,27 +2,27 @@ C/C++ Structured Log^
\ \
ZC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\x86\additional_project_files.txtC ZC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\x86\additional_project_files.txtC
A A
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  Ñ‘™¬ó2  ßïšì2[ ?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  þ<EFBFBD>ýó2  ßïšì2[
Y 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  <EFBFBD><EFBFBD>ýó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  <EFBFBD><EFBFBD>ýó2ƒ ðïšì2M
K 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  <EFBFBD><EFBFBD>ýó2ÞÛ îšì2Q
O 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  <EFBFBD><EFBFBD>ýó2V
T 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  <EFBFBD><EFBFBD>ýó2 S þïšì2W
U 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  <EFBFBD><EFBFBD>ýó2[
Y 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  <EFBFBD><EFBFBD>ýó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  <EFBFBD><EFBFBD>ýó2
© ôïšì2T © ôïšì2T
R 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  <EFBFBD>ýó2  ( úïšì2Y
W 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  <EFBFBD>ýó2  L ýïšì2W
U U
SC:\flutter\src\flutter\packages\flutter_tools\gradle\src\main\groovy\CMakeLists.txt  Ò‘™¬ó2 § ÑÜÐßÓ2 SC:\flutter\src\flutter\packages\flutter_tools\gradle\src\main\groovy\CMakeLists.txt  <EFBFBD>ýó2 § ÑÜÐßÓ2

View File

@ -2,27 +2,27 @@ C/C++ Structured Loga
_ _
]C:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\x86_64\additional_project_files.txtC ]C:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\x86_64\additional_project_files.txtC
A A
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  ƒ’™¬ó2  Œ„—šì2^ ?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  É—<EFBFBD>ýó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  É—<EFBFBD>ýó2 “„—šì2c
a 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  É—<EFBFBD>ýó2 „—šì2P
N 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  É—<EFBFBD>ýó2íÛ ç—šì2T
R 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  Ê—<EFBFBD>ýó2Y
W 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  Ê—<EFBFBD>ýó2 S ž„—šì2Z
X 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  Ê—<EFBFBD>ýó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  Ê—<EFBFBD>ýó2 d
b 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  Ê—<EFBFBD>ýó2
¸ œ„—šì2W ¸ œ„—šì2W
U U
SC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\x86_64\prefab_config.json  „’™¬ó2  ( <20>„—šì2\ SC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\x86_64\prefab_config.json  Ê—<EFBFBD>ýó2  ( <20>„—šì2\
Z Z
XC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\x86_64\symbol_folder_index.txt  „’™¬ó2  O <20>„—šì2W XC:\flutter code\FCSC\FCSC\android\app\.cxx\Debug\m4rj1019\x86_64\symbol_folder_index.txt  Ê—<EFBFBD>ýó2  O <20>„—šì2W
U U
SC:\flutter\src\flutter\packages\flutter_tools\gradle\src\main\groovy\CMakeLists.txt  „’™¬ó2 § ÑÜÐßÓ2 SC:\flutter\src\flutter\packages\flutter_tools\gradle\src\main\groovy\CMakeLists.txt  Ê—<EFBFBD>ýó2 § ÑÜÐßÓ2

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

View File

@ -300,6 +300,7 @@ import 'package:go_router/go_router.dart';
import 'package:uae_stat/config/sessionCheckScreen.dart'; import 'package:uae_stat/config/sessionCheckScreen.dart';
import 'package:uae_stat/domain/entities/session_entity.dart'; import 'package:uae_stat/domain/entities/session_entity.dart';
import 'package:uae_stat/infrastructure/data/p_auth_repo.dart'; import 'package:uae_stat/infrastructure/data/p_auth_repo.dart';
import 'package:uae_stat/presentation/Screens/Bottom%20Navigation%20Pages/Competitiveness/Detailedcompetitiveness.dart';
import 'package:uae_stat/presentation/Screens/Bottom%20Navigation%20Pages/Country_Profile/DetailedCountryProfilePage.dart'; import 'package:uae_stat/presentation/Screens/Bottom%20Navigation%20Pages/Country_Profile/DetailedCountryProfilePage.dart';
import 'package:uae_stat/presentation/Screens/Bottom%20Navigation%20Pages/UAE_Numbers/Social/marriages.dart'; import 'package:uae_stat/presentation/Screens/Bottom%20Navigation%20Pages/UAE_Numbers/Social/marriages.dart';
import 'package:uae_stat/presentation/Screens/app_tour/WelcomePage.dart'; import 'package:uae_stat/presentation/Screens/app_tour/WelcomePage.dart';
@ -663,6 +664,14 @@ final GoRouter router = GoRouter(
); );
}, },
), ),
GoRoute(
path: '/reportDetail',
builder: (context, state) {
final report = state.extra as Map<String, dynamic>;
return ReportDetailPage(report: report);
},
),
GoRoute( GoRoute(
path: '/marriages', path: '/marriages',
builder: (context, state) => Marriages(), builder: (context, state) => Marriages(),

View File

@ -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<String, dynamic> 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,
),
),
],
),
);
}
}

View File

@ -1,5 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:go_router/go_router.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'; import 'package:uae_stat/presentation/routes/drawer_routes/custom_drawer_routes.dart';
class Competitiveness extends StatelessWidget { class Competitiveness extends StatelessWidget {
@ -14,7 +15,18 @@ class Competitiveness extends StatelessWidget {
context.go('/myhomepage'); context.go('/myhomepage');
}, },
child: BaseScaffold( child: BaseScaffold(
title: Center(child: Text("UAE Competitiveness")), title: Text(
context.translate(
'UAE Competitiveness',
'تنافسية دولة الإمارات العربية المتحدة',
),
style: TextStyle(
fontFamily: context.translate(
'Roboto',
'NotoKufi',
)
),
),
body: CompetitivenessState(context), body: CompetitivenessState(context),
), ),
); );
@ -25,49 +37,49 @@ class Competitiveness extends StatelessWidget {
{ {
'rank': 44, 'rank': 44,
'title': 'Prosperity Index (2023)', 'title': 'Prosperity Index (2023)',
'logo': 'assets/backgrounds/share/fcsc.svg', 'logo': 'assets/competitiveness/solo.png',
'borderColor': Colors.blue, 'borderColor': Colors.blue,
}, },
{ {
'rank': 26, 'rank': 26,
'title': 'World Happiness Report (2023)', 'title': 'World Happiness Report (2023)',
'logo': 'assets/backgrounds/share/fcsc.svg', 'logo': 'assets/competitiveness/soloo.png',
'borderColor': Color(0xFF844F36), 'borderColor': Color(0xFF844F36),
}, },
{ {
'rank': 7, 'rank': 7,
'title': 'Logistics Performance Index (2023)', 'title': 'Logistics Performance Index (2023)',
'logo': 'assets/backgrounds/share/fcsc.svg', 'logo': 'assets/competitiveness/solo.png',
'borderColor': Colors.blue, 'borderColor': Colors.blue,
}, },
{ {
'rank': 10, 'rank': 10,
'title': 'Global Soft Power Index (2023)', 'title': 'Global Soft Power Index (2023)',
'logo': 'assets/backgrounds/share/fcsc.svg', 'logo': 'assets/competitiveness/soloo.png',
'borderColor': Colors.blue, 'borderColor': Colors.blue,
}, },
{ {
'rank': 76, 'rank': 76,
'title': 'Global Terrorism Index (2023)', 'title': 'Global Terrorism Index (2023)',
'logo': 'assets/backgrounds/share/fcsc.svg', 'logo': 'assets/competitiveness/solo.png',
'borderColor': Color(0xFF844F36), 'borderColor': Color(0xFF844F36),
}, },
{ {
'rank': 10, 'rank': 10,
'title': 'The World Competitiveness Yearbook (2023)', 'title': 'The World Competitiveness Yearbook (2023)',
'logo': 'assets/backgrounds/share/fcsc.svg', 'logo': 'assets/competitiveness/soloo.png',
'borderColor': Colors.blue, 'borderColor': Colors.blue,
}, },
{ {
'rank': 71, 'rank': 71,
'title': 'Global Gender Gap Report (2023)', 'title': 'Global Gender Gap Report (2023)',
'logo': 'assets/backgrounds/share/fcsc.svg', 'logo': 'assets/competitiveness/solo.png',
'borderColor': Colors.blue, 'borderColor': Colors.blue,
}, },
{ {
'rank': 29, 'rank': 29,
'title': 'Competitive Industrial Performance Index (2023)', 'title': 'Competitive Industrial Performance Index (2023)',
'logo': 'assets/backgrounds/share/fcsc.svg', 'logo': 'assets/competitiveness/soloo.png',
'borderColor': Color(0xFF844F36), 'borderColor': Color(0xFF844F36),
}, },
]; ];
@ -87,42 +99,52 @@ class Competitiveness extends StatelessWidget {
final report = reports[index]; final report = reports[index];
return Padding( return Padding(
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 6), padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 6),
child: Container( child: InkWell(
decoration: BoxDecoration( onTap: () {
border: Border.all(color: report['borderColor']), // Navigate to detail page with arguments
borderRadius: BorderRadius.circular(12), context.push('/reportDetail', extra: report);
), },
padding: const EdgeInsets.symmetric(vertical: 12, horizontal: 16), child: Container(
child: Row( decoration: BoxDecoration(
children: [ border: Border.all(color: report['borderColor']),
Column( borderRadius: BorderRadius.circular(12),
mainAxisAlignment: MainAxisAlignment.center, ),
children: [ padding: const EdgeInsets.symmetric(vertical: 12, horizontal: 16),
Text( child: Row(
'Rank', crossAxisAlignment: CrossAxisAlignment.center,
style: TextStyle(fontSize: 12, color: Colors.grey[600]), children: [
), Column(
Text( mainAxisAlignment: MainAxisAlignment.center,
'${report['rank']}', children: [
style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold), Text(
), 'Rank',
], style: TextStyle(fontSize: 12, color: Colors.grey[600]),
), ),
SizedBox(width: 12), Text(
Expanded( '${report['rank']}',
child: Text( style: const TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
report['title'], ),
style: TextStyle(fontSize: 14, fontWeight: FontWeight.w500), ],
), ),
), const SizedBox(width: 12),
SizedBox(width: 4), Expanded(
Image.asset( child: Text(
report['logo'], report['title'],
width: 10, style: const TextStyle(fontSize: 14, fontWeight: FontWeight.w500),
height: 10, ),
fit: BoxFit.contain, ),
), const SizedBox(width: 8),
], Container(
height: 58,
width: 69,
alignment: Alignment.center,
child: Image.asset(
report['logo'],
fit: BoxFit.fitHeight,
),
),
],
),
), ),
), ),
); );

View File

@ -21,7 +21,7 @@ class DetailedCountryProfilePage extends StatelessWidget {
return BaseScaffold( return BaseScaffold(
title: const Text('Country Profile'), title: const Text('Country Profile'),
hasDrawer: false, hasDrawer: false,
leading: const BackButton(), showBackButton: true,
body: SingleChildScrollView( body: SingleChildScrollView(
child: Padding( child: Padding(
padding: const EdgeInsets.all(16.0), padding: const EdgeInsets.all(16.0),
@ -77,31 +77,52 @@ class DetailedCountryProfilePage extends StatelessWidget {
], ],
), ),
const SizedBox(height: 24), const SizedBox(height: 24),
Wrap( Column(
spacing: 16, crossAxisAlignment: CrossAxisAlignment.stretch,
runSpacing: 16,
alignment: WrapAlignment.center,
children: [ children: [
_CategoryButton( Row(
title: 'Demography', mainAxisAlignment: MainAxisAlignment.spaceEvenly,
color: const Color(0xFFD7C1AF), children: [
onTap: () => showCategoryPopup(context, 'Demography'), 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( const SizedBox(height: 16),
title: 'GDP', Row(
color: const Color(0xFFAEC6CF), mainAxisAlignment: MainAxisAlignment.spaceEvenly,
onTap: () => showCategoryPopup(context, 'GDP'), children: [
), Expanded(
_CategoryButton( child: _CategoryButton(
title: 'FDI', title: 'FDI',
color: const Color(0xFFD7AFAF), color: const Color(0xFFD7AFAF),
onTap: () => showCategoryPopup(context, 'FDI'), onTap: () => showCategoryPopup(context, 'FDI'),
), ),
_CategoryButton( ),
title: 'Trade', const SizedBox(width: 16),
color: const Color(0xFFAFCFAF), Expanded(
onTap: () => showCategoryPopup(context, 'Trade'), child: _CategoryButton(
title: 'Trade',
color: const Color(0xFFAFCFAF),
onTap: () => showCategoryPopup(context, 'Trade'),
),
),
],
), ),
const SizedBox(height: 16),
// Full-width button
_CategoryButton( _CategoryButton(
title: 'Bilateral Trade', title: 'Bilateral Trade',
color: const Color(0xFF9FAFCF), color: const Color(0xFF9FAFCF),
@ -109,6 +130,8 @@ class DetailedCountryProfilePage extends StatelessWidget {
), ),
], ],
) )
], ],
), ),
), ),
@ -235,32 +258,31 @@ class _CategoryButton extends StatelessWidget {
final VoidCallback onTap; final VoidCallback onTap;
const _CategoryButton({ const _CategoryButton({
Key? key, super.key,
required this.title, required this.title,
required this.color, required this.color,
required this.onTap, required this.onTap,
}) : super(key: key); });
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return GestureDetector( return GestureDetector(
onTap: onTap, onTap: onTap,
child: Container( child: Container(
width: 178.34, height: 100,
height: 112.59, width: double.infinity, // This ensures full width
decoration: BoxDecoration( decoration: BoxDecoration(
color: color, color: color,
borderRadius: BorderRadius.circular(20), borderRadius: BorderRadius.circular(12),
), ),
alignment: Alignment.center, alignment: Alignment.center,
child: Text( child: Text(
title, title,
style: const TextStyle( style: const TextStyle(
fontSize: 16,
color: Colors.white, color: Colors.white,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
fontSize: 16,
), ),
textAlign: TextAlign.center,
), ),
), ),
); );
@ -277,6 +299,7 @@ class CategoryPopupContent extends StatelessWidget {
case 'Demography': case 'Demography':
return Column( return Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.center,
children: [ children: [
const SizedBox(height: 8), const SizedBox(height: 8),
Container( Container(
@ -288,45 +311,54 @@ class CategoryPopupContent extends StatelessWidget {
), ),
), ),
const SizedBox(height: 16), const SizedBox(height: 16),
const Text(
'GDP Overview', _DemographyItem(
style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold), icon: Icons.location_city,
), title: 'Capital City',
const SizedBox(height: 16), value: 'Buenos Aires',
_GDPItem(
title: '2021 Nominal GDP (AED)',
value: '1.8 T',
rank: '26',
), ),
Divider(), Divider(),
_GDPItem(
title: '2021 Real GDP (AED)', _DemographyItem(
value: '2.08 T', icon: Icons.map,
rank: '22', title: 'Surface Area',
value: '2,780,400 sq. km',
), ),
Divider(), Divider(),
_GDPItem(
title: '2021 GDP Per Capita (AED)', _DemographyStatItem(
value: '39.38 K', icon: Icons.groups,
rank: '64', title: '2021 Population',
value: '45.81 M',
suffix: '32 ↑ Rank',
suffixStyle: const TextStyle(color: Colors.green, fontSize: 12),
), ),
Divider(), Divider(),
const SizedBox(height: 8),
const Text( _DemographyStatItem(
'Income Level', icon: Icons.male,
style: TextStyle(color: Colors.grey), title: '2021 Male Population',
value: '22.35 M',
suffix: '0.98% ↑ Growth Rate',
valueColor: Colors.deepPurple,
), ),
const SizedBox(height: 4), Divider(),
const Text(
'Upper Middle Income', _DemographyStatItem(
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 16), icon: Icons.female,
title: '2021 Female Population',
value: '23.46 M',
suffix: '0.93% ↑ Growth Rate',
valueColor: Colors.purple,
), ),
const SizedBox(height: 16), const SizedBox(height: 16),
], ],
); );
case 'GDP': case 'GDP':
return Column( return Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.center,
children: [ children: [
const SizedBox(height: 8), const SizedBox(height: 8),
Container( Container(
@ -338,30 +370,40 @@ class CategoryPopupContent extends StatelessWidget {
), ),
), ),
const SizedBox(height: 16), const SizedBox(height: 16),
const Text(
'GDP Overview', _GDPMetricItem(
style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold), icon: Icons.apartment,
),
const SizedBox(height: 16),
_GDPItem(
title: '2021 Nominal GDP (AED)', title: '2021 Nominal GDP (AED)',
value: '1.8 T', value: '1.8 T',
rank: '26', rank: '26',
rankDirection: '',
rankColor: Colors.red,
), ),
Divider(), Divider(),
_GDPItem(
_GDPMetricItem(
icon: Icons.public,
title: '2021 Real GDP (AED)', title: '2021 Real GDP (AED)',
value: '2.08 T', value: '2.08 T',
rank: '22', rank: '22',
rankDirection: '',
rankColor: Colors.red,
), ),
Divider(), Divider(),
_GDPItem(
_GDPMetricItem(
icon: Icons.groups_3,
title: '2021 GDP Per Capita (AED)', title: '2021 GDP Per Capita (AED)',
value: '39.38 K', value: '39.38 K',
rank: '64', rank: '64',
rankDirection: '',
rankColor: Colors.red,
), ),
Divider(), Divider(),
const SizedBox(height: 8), const SizedBox(height: 8),
Icon(Icons.stacked_bar_chart, color: Colors.grey),
const SizedBox(height: 4),
const Text( const Text(
'Income Level', 'Income Level',
style: TextStyle(color: Colors.grey), style: TextStyle(color: Colors.grey),
@ -377,6 +419,7 @@ class CategoryPopupContent extends StatelessWidget {
case 'FDI': case 'FDI':
return Column( return Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.center,
children: [ children: [
const SizedBox(height: 8), const SizedBox(height: 8),
Container( Container(
@ -388,38 +431,31 @@ class CategoryPopupContent extends StatelessWidget {
), ),
), ),
const SizedBox(height: 16), const SizedBox(height: 16),
const Text(
'GDP Overview', _FDIItem(
style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold), icon: Icons.trending_down,
), title: '2020 FDI Outflows (AED)',
const SizedBox(height: 16), value: '4.75 B',
_GDPItem( growthRate: '-15.94%',
title: '2021 Nominal GDP (AED)', isPositive: false,
value: '1.8 T',
rank: '26',
), ),
Divider(), Divider(),
_GDPItem(
title: '2021 Real GDP (AED)', _FDIItem(
value: '2.08 T', icon: Icons.swap_horizontal_circle_outlined,
rank: '22', title: '2020 FDI Inflows (AED)',
value: '14.75 B',
growthRate: '-39.68%',
isPositive: false,
), ),
Divider(), Divider(),
_GDPItem(
title: '2021 GDP Per Capita (AED)', _FDIItem(
value: '39.38 K', icon: Icons.thumb_up_alt_outlined,
rank: '64', title: '2021 FDI Stocks (AED)',
), value: '18.98 B',
Divider(), growthRate: '89.75%',
const SizedBox(height: 8), isPositive: true,
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: 16), const SizedBox(height: 16),
], ],
@ -427,6 +463,7 @@ class CategoryPopupContent extends StatelessWidget {
case 'Trade': case 'Trade':
return Column( return Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.center,
children: [ children: [
const SizedBox(height: 8), const SizedBox(height: 8),
Container( Container(
@ -438,38 +475,31 @@ class CategoryPopupContent extends StatelessWidget {
), ),
), ),
const SizedBox(height: 16), const SizedBox(height: 16),
const Text(
'GDP Overview', _TradeItem(
style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold), icon: Icons.cached,
), title: '2021 Total Trade (AED)',
const SizedBox(height: 16), value: '603 B',
_GDPItem( growthRate: '39.89%',
title: '2021 Nominal GDP (AED)', isPositive: true,
value: '1.8 T',
rank: '26',
), ),
Divider(), Divider(),
_GDPItem(
title: '2021 Real GDP (AED)', _TradeItem(
value: '2.08 T', icon: Icons.download_outlined,
rank: '22', title: '2021 Imports (AED)',
value: '272.9 B',
growthRate: '40.79%',
isPositive: true,
), ),
Divider(), Divider(),
_GDPItem(
title: '2021 GDP Per Capita (AED)', _TradeItem(
value: '39.38 K', icon: Icons.upload_outlined,
rank: '64', title: '2021 Exports (AED)',
), value: '330.1 B',
Divider(), growthRate: '39.15%',
const SizedBox(height: 8), isPositive: true,
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: 16), const SizedBox(height: 16),
], ],
@ -477,50 +507,56 @@ class CategoryPopupContent extends StatelessWidget {
case 'Bilateral Trade': case 'Bilateral Trade':
return Column( return Column(
mainAxisSize: MainAxisSize.min, mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
const SizedBox(height: 8), const SizedBox(height: 8),
Container( Center(
width: 50, child: Container(
height: 5, width: 50,
decoration: BoxDecoration( height: 5,
color: Colors.grey[300], decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10), color: Colors.grey[300],
borderRadius: BorderRadius.circular(10),
),
), ),
), ),
const SizedBox(height: 16), const SizedBox(height: 16),
const Text( const Center(
'GDP Overview', child: Text(
style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold), '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), const SizedBox(height: 16),
_GDPItem( Row(
title: '2021 Nominal GDP (AED)', mainAxisAlignment: MainAxisAlignment.spaceEvenly,
value: '1.8 T', children: const [
rank: '26', _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(), const SizedBox(height: 24),
_GDPItem( const Center(
title: '2021 Real GDP (AED)', child: Text(
value: '2.08 T', 'Top 5 Import Commodities',
rank: '22', style: TextStyle(
), fontSize: 16, fontWeight: FontWeight.bold, color: Color(0xFF4FBFA8)),
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: 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), 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 //pop-up
void showCategoryPopup(BuildContext context, String category) { void showCategoryPopup(BuildContext context, String category) {
showDialog( showDialog(
context: context, context: context,
barrierColor: Colors.black.withOpacity(0.3), // semi-transparent background barrierColor: Colors.black.withOpacity(0.3),
builder: (context) => BackdropFilter( builder: (context) => BackdropFilter(
filter: ImageFilter.blur(sigmaX: 5, sigmaY: 5), // blur effect filter: ImageFilter.blur(sigmaX: 5, sigmaY: 5),
child: Dialog( child: Dialog(
backgroundColor: Colors.white,
insetPadding: const EdgeInsets.symmetric(horizontal: 20, vertical: 40), insetPadding: const EdgeInsets.symmetric(horizontal: 20, vertical: 40),
shape: RoundedRectangleBorder( shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(16), borderRadius: BorderRadius.circular(16),
@ -552,3 +813,4 @@ void showCategoryPopup(BuildContext context, String category) {
); );
} }

View File

@ -109,18 +109,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: async name: async
sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" sha256: d2872f9c19731c2e5f10444b14686eb7cc85c76274bd6c16e1816bff9a3bab63
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.11.0" version: "2.12.0"
boolean_selector: boolean_selector:
dependency: transitive dependency: transitive
description: description:
name: boolean_selector name: boolean_selector
sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.1" version: "2.1.2"
boxy: boxy:
dependency: "direct main" dependency: "direct main"
description: description:
@ -197,10 +197,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: characters name: characters
sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.3.0" version: "1.4.0"
checked_yaml: checked_yaml:
dependency: transitive dependency: transitive
description: description:
@ -229,10 +229,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: clock name: clock
sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.1.1" version: "1.1.2"
code_builder: code_builder:
dependency: transitive dependency: transitive
description: description:
@ -245,10 +245,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: collection name: collection
sha256: a1ace0a119f20aabc852d165077c036cd864315bd99b7eaa10a60100341941bf sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.19.0" version: "1.19.1"
community_charts_common: community_charts_common:
dependency: transitive dependency: transitive
description: description:
@ -460,10 +460,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: fake_async name: fake_async
sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" sha256: "6a95e56b2449df2273fd8c45a662d6947ce1ebb7aafe80e550a3f68297f3cacc"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.3.1" version: "1.3.2"
fast_immutable_collections: fast_immutable_collections:
dependency: "direct main" dependency: "direct main"
description: description:
@ -1008,18 +1008,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: leak_tracker name: leak_tracker
sha256: "7bb2830ebd849694d1ec25bf1f44582d6ac531a57a365a803a6034ff751d2d06" sha256: c35baad643ba394b40aac41080300150a4f08fd0fd6a10378f8f7c6bc161acec
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "10.0.7" version: "10.0.8"
leak_tracker_flutter_testing: leak_tracker_flutter_testing:
dependency: transitive dependency: transitive
description: description:
name: leak_tracker_flutter_testing name: leak_tracker_flutter_testing
sha256: "9491a714cca3667b60b5c420da8217e6de0d1ba7a5ec322fab01758f6998f379" sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "3.0.8" version: "3.0.9"
leak_tracker_testing: leak_tracker_testing:
dependency: transitive dependency: transitive
description: description:
@ -1064,10 +1064,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: matcher name: matcher
sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.12.16+1" version: "0.12.17"
material_charts: material_charts:
dependency: "direct main" dependency: "direct main"
description: description:
@ -1088,10 +1088,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: meta name: meta
sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7 sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.15.0" version: "1.16.0"
mime: mime:
dependency: transitive dependency: transitive
description: description:
@ -1144,10 +1144,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: path name: path
sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.9.0" version: "1.9.1"
path_parsing: path_parsing:
dependency: transitive dependency: transitive
description: description:
@ -1467,10 +1467,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: source_span name: source_span
sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c" sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.10.0" version: "1.10.1"
sprintf: sprintf:
dependency: transitive dependency: transitive
description: description:
@ -1483,10 +1483,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: stack_trace name: stack_trace
sha256: "9f47fd3630d76be3ab26f0ee06d213679aa425996925ff3feffdec504931c377" sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.12.0" version: "1.12.1"
state_notifier: state_notifier:
dependency: transitive dependency: transitive
description: description:
@ -1499,10 +1499,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: stream_channel name: stream_channel
sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7 sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.1.2" version: "2.1.4"
stream_transform: stream_transform:
dependency: transitive dependency: transitive
description: description:
@ -1515,26 +1515,26 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: string_scanner name: string_scanner
sha256: "688af5ed3402a4bde5b3a6c15fd768dbf2621a614950b17f04626c431ab3c4c3" sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.3.0" version: "1.4.1"
term_glyph: term_glyph:
dependency: transitive dependency: transitive
description: description:
name: term_glyph name: term_glyph
sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.2.1" version: "1.2.2"
test_api: test_api:
dependency: transitive dependency: transitive
description: description:
name: test_api name: test_api
sha256: "664d3a9a64782fcdeb83ce9c6b39e78fd2971d4e37827b9b06c3aa1edc5e760c" sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.7.3" version: "0.7.4"
the_validator: the_validator:
dependency: "direct main" dependency: "direct main"
description: description:
@ -1723,10 +1723,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: vm_service name: vm_service
sha256: f6be3ed8bd01289b34d679c2b62226f63c0e69f9fd2e50a6b3c1c729a961041b sha256: "0968250880a6c5fe7edc067ed0a13d4bae1577fe2771dcf3010d52c4a9d3ca14"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "14.3.0" version: "14.3.1"
watcher: watcher:
dependency: transitive dependency: transitive
description: description:

View File

@ -123,6 +123,7 @@ flutter:
- assets/backgrounds/from_alsaray/ - assets/backgrounds/from_alsaray/
- assets/country_flags/ - assets/country_flags/
- assets/country-profile/ - assets/country-profile/
- assets/competitiveness/
- assets/cached_responses/informatica/ - assets/cached_responses/informatica/
- assets/cached_responses/sharepoint/ - assets/cached_responses/sharepoint/
- assets/cached_responses/qlik/ - assets/cached_responses/qlik/