competitiveness
This commit is contained in:
parent
8410ab2d5b
commit
e994e8e5e0
@ -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 ø<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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
@ -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 å‹<EFBFBD>ýó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 æ‹<EFBFBD>ýó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 æ‹<EFBFBD>ýó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 æ‹<EFBFBD>ýó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 æ‹<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
|
||||
_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
|
||||
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\
|
||||
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
|
||||
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
|
||||
@ -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 þ–<EFBFBD>ýó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 <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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
@ -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 É—<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
|
||||
_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
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
`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
|
||||
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
|
||||
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
|
||||
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
|
||||
BIN
assets/competitiveness/solo.png
Normal file
BIN
assets/competitiveness/solo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 4.9 KiB |
BIN
assets/competitiveness/soloo.png
Normal file
BIN
assets/competitiveness/soloo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.7 KiB |
@ -300,6 +300,7 @@ import 'package:go_router/go_router.dart';
|
||||
import 'package:uae_stat/config/sessionCheckScreen.dart';
|
||||
import 'package:uae_stat/domain/entities/session_entity.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/UAE_Numbers/Social/marriages.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(
|
||||
path: '/marriages',
|
||||
builder: (context, state) => Marriages(),
|
||||
|
||||
@ -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,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -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,
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
@ -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) {
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
|
||||
72
pubspec.lock
72
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:
|
||||
|
||||
@ -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/
|
||||
|
||||
Loading…
Reference in New Issue
Block a user