country list arabic and bilateral trade dynamic

This commit is contained in:
Kalonkarthik 2025-07-03 17:18:06 +05:30
parent 4ed46d5d54
commit 07d97fa541
7 changed files with 529 additions and 278 deletions

View File

@ -2,27 +2,27 @@ C/C++ Structured Logo
m
kC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\arm64-v8a\additional_project_files.txtC
A
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  øŒµ¬ü2  äýŸÞø2l
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  ŒíÍ€ý2  äýŸÞø2l
j
hC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\arm64-v8a\android_gradle_build.json  øŒµ¬ü2É ŠþŸÞø2q
hC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\arm64-v8a\android_gradle_build.json  ŒíÍ€ý2É ŠþŸÞø2q
o
mC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\arm64-v8a\android_gradle_build_mini.json  øŒµ¬ü2œ ·þŸÞø2^
mC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\arm64-v8a\android_gradle_build_mini.json  ŒíÍ€ý2œ ·þŸÞø2^
\
ZC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\arm64-v8a\build.ninja  øŒµ¬ü2›Ü çúŸÞø2b
ZC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\arm64-v8a\build.ninja  ŒíÍ€ý2›Ü çúŸÞø2b
`
^C:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\arm64-v8a\build.ninja.txt  øŒµ¬ü2g
^C:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\arm64-v8a\build.ninja.txt  ŒíÍ€ý2g
e
cC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\arm64-v8a\build_file_index.txt  øŒµ¬ü2 K ÜþŸÞø2h
cC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\arm64-v8a\build_file_index.txt  ŒíÍ€ý2 K ÜþŸÞø2h
f
dC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\arm64-v8a\compile_commands.json  øŒµ¬ü2l
dC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\arm64-v8a\compile_commands.json  ŒíÍ€ý2l
j
hC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\arm64-v8a\compile_commands.json.bin  øŒµ¬ü2 r
hC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\arm64-v8a\compile_commands.json.bin  ŒíÍ€ý2 r
p
nC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\arm64-v8a\metadata_generation_command.txt  øŒµ¬ü2
nC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\arm64-v8a\metadata_generation_command.txt  ŒíÍ€ý2
à ÔþŸÞø2e
c
aC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\arm64-v8a\prefab_config.json  øŒµ¬ü2  ( ÙþŸÞø2j
aC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\arm64-v8a\prefab_config.json  ŒíÍ€ý2  ( ÙþŸÞø2j
h
fC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\arm64-v8a\symbol_folder_index.txt  øŒµ¬ü2  ] ÙþŸÞø2O
fC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\arm64-v8a\symbol_folder_index.txt  ŒíÍ€ý2  ] ÙþŸÞø2O
M
KC:\src\flutter\packages\flutter_tools\gradle\src\main\groovy\CMakeLists.txt  øŒµ¬ü2 § œ¬ùšõ2
KC:\src\flutter\packages\flutter_tools\gradle\src\main\groovy\CMakeLists.txt  ŒíÍ€ý2 § œ¬ùšõ2

View File

@ -2,27 +2,27 @@ C/C++ Structured Logq
o
mC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\armeabi-v7a\additional_project_files.txtC
A
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  ¢<EFBFBD>µ¬ü2  åÇ Þø2n
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  ÂíÍ€ý2  åÇ Þø2n
l
jC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\armeabi-v7a\android_gradle_build.json  ¢<EFBFBD>µ¬ü2Í ïÇ Þø2s
jC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\armeabi-v7a\android_gradle_build.json  ÃíÍ€ý2Í ïÇ Þø2s
q
oC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\armeabi-v7a\android_gradle_build_mini.json  ¢<EFBFBD>µ¬ü2  óÇ Þø2`
oC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\armeabi-v7a\android_gradle_build_mini.json  ÃíÍ€ý2  óÇ Þø2`
^
\C:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\armeabi-v7a\build.ninja  ¢<EFBFBD>µ¬ü2¥Ü ÃÅ Þø2d
\C:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\armeabi-v7a\build.ninja  ÃíÍ€ý2¥Ü ÃÅ Þø2d
b
`C:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\armeabi-v7a\build.ninja.txt  ¢<EFBFBD>µ¬ü2i
`C:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\armeabi-v7a\build.ninja.txt  ÃíÍ€ý2i
g
eC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\armeabi-v7a\build_file_index.txt  ¢<EFBFBD>µ¬ü2 K ýÇ Þø2j
eC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\armeabi-v7a\build_file_index.txt  ÃíÍ€ý2 K ýÇ Þø2j
h
fC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\armeabi-v7a\compile_commands.json  ¢<EFBFBD>µ¬ü2n
fC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\armeabi-v7a\compile_commands.json  ÃíÍ€ý2n
l
jC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\armeabi-v7a\compile_commands.json.bin  ¢<EFBFBD>µ¬ü2 t
jC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\armeabi-v7a\compile_commands.json.bin  ÃíÍ€ý2 t
r
pC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\armeabi-v7a\metadata_generation_command.txt  ¢<EFBFBD>µ¬ü2
pC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\armeabi-v7a\metadata_generation_command.txt  ÃíÍ€ý2
ê øÇ Þø2g
e
cC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\armeabi-v7a\prefab_config.json  ¢<EFBFBD>µ¬ü2  ( ùÇ Þø2l
cC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\armeabi-v7a\prefab_config.json  ÃíÍ€ý2  ( ùÇ Þø2l
j
hC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\armeabi-v7a\symbol_folder_index.txt  ¢<EFBFBD>µ¬ü2  _ ùÇ Þø2O
hC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\armeabi-v7a\symbol_folder_index.txt  ÃíÍ€ý2  _ ùÇ Þø2O
M
KC:\src\flutter\packages\flutter_tools\gradle\src\main\groovy\CMakeLists.txt  ¢<EFBFBD>µ¬ü2 § œ¬ùšõ2
KC:\src\flutter\packages\flutter_tools\gradle\src\main\groovy\CMakeLists.txt  ÃíÍ€ý2 § œ¬ùšõ2

View File

@ -2,27 +2,27 @@ C/C++ Structured Logi
g
eC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\x86\additional_project_files.txtC
A
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  û<EFBFBD>µ¬ü2  ÿò Þø2f
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  éíÍ€ý2  ÿò Þø2f
d
bC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\x86\android_gradle_build.json  û<EFBFBD>µ¬ü2½ ¤ó Þø2k
bC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\x86\android_gradle_build.json  éíÍ€ý2½ ¤ó Þø2k
i
gC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\x86\android_gradle_build_mini.json  û<EFBFBD>µ¬ü2<18> °ó Þø2X
gC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\x86\android_gradle_build_mini.json  éíÍ€ý2<18> °ó Þø2X
V
TC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\x86\build.ninja  û<EFBFBD>µ¬ü2ýÛ ³ï Þø2\
TC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\x86\build.ninja  éíÍ€ý2ýÛ ³ï Þø2\
Z
XC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\x86\build.ninja.txt  û<EFBFBD>µ¬ü2a
XC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\x86\build.ninja.txt  éíÍ€ý2a
_
]C:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\x86\build_file_index.txt  û<EFBFBD>µ¬ü2 K Âó Þø2b
]C:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\x86\build_file_index.txt  éíÍ€ý2 K Âó Þø2b
`
^C:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\x86\compile_commands.json  û<EFBFBD>µ¬ü2f
^C:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\x86\compile_commands.json  éíÍ€ý2f
d
bC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\x86\compile_commands.json.bin  û<EFBFBD>µ¬ü2 l
bC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\x86\compile_commands.json.bin  éíÍ€ý2 l
j
hC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\x86\metadata_generation_command.txt  û<EFBFBD>µ¬ü2
hC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\x86\metadata_generation_command.txt  éíÍ€ý2
 ´ó Þø2_
]
[C:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\x86\prefab_config.json  û<EFBFBD>µ¬ü2  ( ´ó Þø2d
[C:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\x86\prefab_config.json  éíÍ€ý2  ( ´ó Þø2d
b
`C:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\x86\symbol_folder_index.txt  û<EFBFBD>µ¬ü2  W ¹ó Þø2O
`C:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\x86\symbol_folder_index.txt  éíÍ€ý2  W ¹ó Þø2O
M
KC:\src\flutter\packages\flutter_tools\gradle\src\main\groovy\CMakeLists.txt  û<EFBFBD>µ¬ü2 § œ¬ùšõ2
KC:\src\flutter\packages\flutter_tools\gradle\src\main\groovy\CMakeLists.txt  éíÍ€ý2 § œ¬ùšõ2

View File

@ -2,27 +2,27 @@ C/C++ Structured Logl
j
hC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\x86_64\additional_project_files.txtC
A
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  掵¬ü2  ù”¡Þø2i
?com.android.build.gradle.internal.cxx.io.EncodedFileFingerPrint  ‰îÍ€ý2  ù”¡Þø2i
g
eC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\x86_64\android_gradle_build.json  掵¬ü2à •¡Þø2n
eC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\x86_64\android_gradle_build.json  ‰îÍ€ý2à •¡Þø2n
l
jC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\x86_64\android_gradle_build_mini.json  掵¬ü2 †•¡Þø2[
jC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\x86_64\android_gradle_build_mini.json  ‰îÍ€ý2 †•¡Þø2[
Y
WC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\x86_64\build.ninja  掵¬ü2ŒÜ þ¡Þø2_
WC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\x86_64\build.ninja  ‰îÍ€ý2ŒÜ þ¡Þø2_
]
[C:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\x86_64\build.ninja.txt  掵¬ü2d
[C:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\x86_64\build.ninja.txt  ‰îÍ€ý2d
b
`C:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\x86_64\build_file_index.txt  掵¬ü2 K <20>•¡Þø2e
`C:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\x86_64\build_file_index.txt  ‰îÍ€ý2 K <20>•¡Þø2e
c
aC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\x86_64\compile_commands.json  掵¬ü2i
aC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\x86_64\compile_commands.json  ‰îÍ€ý2i
g
eC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\x86_64\compile_commands.json.bin  玵¬ü2 o
eC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\x86_64\compile_commands.json.bin  ‰îÍ€ý2 o
m
kC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\x86_64\metadata_generation_command.txt  玵¬ü2
kC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\x86_64\metadata_generation_command.txt  ‰îÍ€ý2
Ñ ‰•¡Þø2b
`
^C:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\x86_64\prefab_config.json  玵¬ü2  ( •¡Þø2g
^C:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\x86_64\prefab_config.json  ‰îÍ€ý2  ( •¡Þø2g
e
cC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\x86_64\symbol_folder_index.txt  玵¬ü2  Z Œ•¡Þø2O
cC:\Flutter Applications\Git_New\FCSC\android\app\.cxx\Debug\29y7472m\x86_64\symbol_folder_index.txt  ‰îÍ€ý2  Z Œ•¡Þø2O
M
KC:\src\flutter\packages\flutter_tools\gradle\src\main\groovy\CMakeLists.txt  玵¬ü2 § œ¬ùšõ2
KC:\src\flutter\packages\flutter_tools\gradle\src\main\groovy\CMakeLists.txt  ‰îÍ€ý2 § œ¬ùšõ2

View File

@ -656,8 +656,7 @@ final GoRouter router = GoRouter(
GoRoute(
path: '/countryprofile',
builder: (context, state) => const CountryProfilePage(),
builder: (context, state) => const ListCountriesRoute(),
),
GoRoute(
path: '/country-profile-detail',

View File

@ -59,7 +59,7 @@ class DetailedCountryProfilePage extends StatelessWidget {
),
const SizedBox(height: 8),
Text(
countryName.toUpperCase(),
context.translate(countryName.toUpperCase(),country.nameAR),
style: const TextStyle(
fontSize: 22,
fontWeight: FontWeight.bold,
@ -300,11 +300,60 @@ class _CategoryButton extends StatelessWidget {
}
}
class CategoryPopupContent extends StatelessWidget {
class CategoryPopupContent extends StatefulWidget {
final String category;
const CategoryPopupContent({super.key, required this.category});
@override
State<CategoryPopupContent> createState() => _CategoryPopupContentState();
}
class _CategoryPopupContentState extends State<CategoryPopupContent> {
late String bilateralTrade=context.translate('Import','الواردات');
late bool selected;
late List<Map<String, dynamic>> tradeList=importLists;
String updateTrade(String newTrade) {
setState(() {
bilateralTrade = newTrade;
if (bilateralTrade=='Import'){
tradeList=importLists;
}else if(bilateralTrade=='Export'){
tradeList=exportLists;
}else if (bilateralTrade=='ReExport'){
tradeList=reExportLists;
}else {
tradeList=[];
}
});
print ('my new bilsteral is $bilateralTrade');
return bilateralTrade;
}
List<Map<String, dynamic>> importLists=[
{'image':PopupAssetPath.vegetable,'content-eng':'Vegetable Products','content-ar':'المنتجات النباتية','value': 198.6},
{'image':PopupAssetPath.food,'content-eng':'Foodstuffs, Beverages, Spirits And Tobacco','content-ar':'المواد الغذائية والمشروبات والمشروبات الروحية والتبغ','value': 89.9},
{'image':PopupAssetPath.metal,'content-eng':'Base Metals And Articles Of Base Metal','content-ar':'المعادن الأساسية ومصنوعاتها','value': 65.6},
{'image':PopupAssetPath.animal,'content-eng':'Live Animals And Their Products','content-ar':'الحيوانات الحية ومنتجاتها','value': 23.7},
{'image':PopupAssetPath.chemical,'content-eng':'Products Of The Chemical or Allied Industries','content-ar':'منتجات الصناعات الكيميائية أو المرتبطة بها','value': 4.7},
];
List<Map<String, dynamic>> exportLists=[
{'image':PopupAssetPath.vegetable,'content-eng':'Vegetable Products','content-ar':'المنتجات النباتية','value': 19.6},
{'image':PopupAssetPath.food,'content-eng':'Foodstuffs, Beverages, Spirits And Tobacco','content-ar':'المواد الغذائية والمشروبات والمشروبات الروحية والتبغ','value': 9.9},
{'image':PopupAssetPath.metal,'content-eng':'Base Metals And Articles Of Base Metal','content-ar':'المعادن الأساسية ومصنوعاتها','value': 12.7},
{'image':PopupAssetPath.animal,'content-eng':'Live Animals And Their Products','content-ar':'الحيوانات الحية ومنتجاتها','value': 0.0},
{'image':PopupAssetPath.chemical,'content-eng':'Products Of The Chemical or Allied Industries','content-ar':'منتجات الصناعات الكيميائية أو المرتبطة بها','value': 0.0},
];
List<Map<String, dynamic>> reExportLists=[
{'image':PopupAssetPath.vegetable,'content-eng':'Vegetable Products','content-ar':'المنتجات النباتية','value': 0.0},
{'image':PopupAssetPath.food,'content-eng':'Foodstuffs, Beverages, Spirits And Tobacco','content-ar':'المواد الغذائية والمشروبات والمشروبات الروحية والتبغ','value': 0.0},
{'image':PopupAssetPath.metal,'content-eng':'Base Metals And Articles Of Base Metal','content-ar':'المعادن الأساسية ومصنوعاتها','value': 0.0},
{'image':PopupAssetPath.animal,'content-eng':'Live Animals And Their Products','content-ar':'الحيوانات الحية ومنتجاتها','value': 23.7},
{'image':PopupAssetPath.chemical,'content-eng':'Products Of The Chemical or Allied Industries','content-ar':'منتجات الصناعات الكيميائية أو المرتبطة بها','value': 16.3},
];
@override
Widget build(BuildContext context) {
final lineBorder=Padding(
@ -325,7 +374,7 @@ class CategoryPopupContent extends StatelessWidget {
color: Color(0xFFE9BF70),
);
final screenWidth=MediaQuery.of(context).size.width;
switch (category) {
switch (widget.category) {
case 'Demography':
return Column(
mainAxisSize: MainAxisSize.min,
@ -546,19 +595,22 @@ class CategoryPopupContent extends StatelessWidget {
label: context.translate('Total Import','إجمالي الواردات'),
value: '\$390.2M',
color: Color(0xFF5BB3AA),
isSelected: true,
isSelected: updateTrade,
defaultTrade:bilateralTrade
),
_BilateralTradeValueBox(
label: context.translate('Total Export','إجمالي الصادرات'),
value: '\$42.2M',
color: Color(0xFFB57184),
isSelected: false,
label: context.translate('Total Export','إجمالي الصادرات'),
value: '\$42.2M',
color: Color(0xFFB57184),
isSelected: updateTrade,
defaultTrade: bilateralTrade,
),
_BilateralTradeValueBox(
label: context.translate('Total ReExport','إجمالي إعادة التصدير'),
value: '\$40.2M',
color: Color(0xFF243E83),
isSelected: false,
label: context.translate('Total ReExport','إجمالي إعادة التصدير'),
value: '\$40.2M',
color: Color(0xFF243E83),
isSelected: updateTrade,
defaultTrade: bilateralTrade,
),
],
),
@ -567,44 +619,74 @@ class CategoryPopupContent extends StatelessWidget {
const SizedBox(height: 24),
Center(
child: Text(
context.translate('Top 5 Import Commodities','أهم 5 سلع مستوردة'),
context.translate('Top 5 $bilateralTrade Commodities','أهم 5 سلع $bilateralTrade'),
style: TextStyle(
fontSize: 20,
fontWeight: FontWeight.bold,
color: Color(0xFF4FBFA8),),
fontSize: 20,
fontWeight: FontWeight.bold,
color: Color(0xFF4FBFA8),),
),
),
const SizedBox(height: 12),
yellowDivider,
_CommodityRow(
icon: PopupAssetPath.vegetable,
label: context.translate('Vegetable Products','المنتجات النباتية'),
value: '\$198.6M',),
yellowDivider,
_CommodityRow(
icon: PopupAssetPath.food,
label: context.translate('Foodstuffs, Beverages, Spirits And Tobacco','المواد الغذائية والمشروبات والمشروبات الروحية والتبغ'),
value: '\$89.9M',),
yellowDivider,
_CommodityRow(
icon: PopupAssetPath.metal,
label: context.translate('Base Metals And Articles Of Base Metal','المعادن الأساسية ومصنوعاتها'),
value: '\$65.6M',),
yellowDivider,
_CommodityRow(
icon: PopupAssetPath.animal,
label: context.translate('Live Animals And Their Products','الحيوانات الحية ومنتجاتها'),
value: '\$23.7M',),
yellowDivider,
_CommodityRow(
icon: PopupAssetPath.chemical,
label: context.translate('Products Of The Chemical or Allied Industries','منتجات الصناعات الكيميائية أو المرتبطة بها'),
value: '\$4.7M',),
Expanded(
child: ListView.separated(
itemCount: tradeList.length,
itemBuilder: (context, index) {
final item = tradeList[index];
return ListTile(
contentPadding: EdgeInsets.symmetric(horizontal: 10,vertical: 1),
leading: Image.asset(
item['image'],
width: 30,
height: 30,
),
title: Text(
context.translate(item['content-eng'], item['content-ar']),
style: const TextStyle(fontSize: 15,fontWeight: FontWeight.w500)
),
trailing: Text(
'\$${item['value']}',
style: const TextStyle(fontSize: 15,
fontWeight: FontWeight.w500,
color: Color(0xFF54AFA6),),
),
);
},
separatorBuilder: (context, index) => Padding(
padding: const EdgeInsets.symmetric(horizontal: 6, vertical: 2),
child: yellowDivider, // or use Dash widget if using flutter_dash package
),
),
),
// _CommodityRow(
// icon: PopupAssetPath.vegetable,
// label: context.translate('Vegetable Products','المنتجات النباتية'),
// value: '\$198.6M',),
// yellowDivider,
// _CommodityRow(
// icon: PopupAssetPath.food,
// label: context.translate('Foodstuffs, Beverages, Spirits And Tobacco','المواد الغذائية والمشروبات والمشروبات الروحية والتبغ'),
// value: '\$89.9M',),
// yellowDivider,
// _CommodityRow(
// icon: PopupAssetPath.metal,
// label: context.translate('Base Metals And Articles Of Base Metal','المعادن الأساسية ومصنوعاتها'),
// value: '\$65.6M',),
// yellowDivider,
// _CommodityRow(
// icon: PopupAssetPath.animal,
// label: context.translate('Live Animals And Their Products','الحيوانات الحية ومنتجاتها'),
// value: '\$23.7M',),
// yellowDivider,
// _CommodityRow(
// icon: PopupAssetPath.chemical,
// label: context.translate('Products Of The Chemical or Allied Industries','منتجات الصناعات الكيميائية أو المرتبطة بها'),
// value: '\$4.7M',),
const SizedBox(height: 16),
],
);
default:
return Center(child: Text('$category details coming soon.'));
return Center(child: Text('${widget.category} details coming soon.'));
}
}
}
@ -862,57 +944,81 @@ Widget _TradeItem({
);
}
class _BilateralTradeValueBox extends StatelessWidget {
class _BilateralTradeValueBox extends StatefulWidget {
final String label;
final String value;
final Color color;
final bool isSelected;
final String Function(String) isSelected;
final String? defaultTrade;
const _BilateralTradeValueBox({
required this.label,
required this.value,
required this.color,
required this.isSelected,
this.defaultTrade,
});
@override
State<_BilateralTradeValueBox> createState() => _BilateralTradeValueBoxState();
}
class _BilateralTradeValueBoxState extends State<_BilateralTradeValueBox> {
late String title;
@override
void initState() {
super.initState();
title = widget.label.split(' ').last;
}
@override
Widget build(BuildContext context) {
return Container(
height: 90,
padding: const EdgeInsets.symmetric(horizontal: 5, vertical: 8),
decoration: BoxDecoration(
color: isSelected?Colors.white:Colors.transparent,
borderRadius: BorderRadius.circular(10),
border: isSelected?Border.all(color:Color(0xFFAA8E83)):null,
boxShadow:isSelected ?[
BoxShadow(
color: Color(0xFFAA8E83).withValues(alpha: 0.5),
blurRadius: 15,
spreadRadius: 0,
offset: Offset(
0,
5,
),
),
]:null,
),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
label,
style: TextStyle(fontSize: 13),
),
const SizedBox(height: 4),
Text(
value,
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 22,
color: color,
final bool selected=title==widget.defaultTrade;
return GestureDetector(
onTap: (){
setState(() {
widget.isSelected(title);
});
},
child: Container(
height: 90,
padding: const EdgeInsets.symmetric(horizontal: 5, vertical: 8),
decoration: BoxDecoration(
color: selected?Colors.white:Colors.transparent,
borderRadius: BorderRadius.circular(10),
border: selected?Border.all(color:Color(0xFFAA8E83)):null,
boxShadow:selected ?[
BoxShadow(
color: Color(0xFFAA8E83).withValues(alpha: 0.5),
blurRadius: 15,
spreadRadius: 0,
offset: Offset(
0,
5,
),
),
),
],
]:null,
),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
widget.label,
style: TextStyle(fontSize: 13),
),
const SizedBox(height: 4),
Text(
widget.value,
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: 22,
color: widget.color,
),
),
],
),
),
);
}

View File

@ -1,175 +1,321 @@
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:go_router/go_router.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:uae_stat/domain/use_cases/language.dart';
import 'package:uae_stat/infrastructure/services/img_asset_paths/icons/misc_icon_asset_path.dart';
import 'package:uae_stat/presentation/routes/drawer_routes/custom_drawer_routes.dart';
import 'package:fl_chart/fl_chart.dart';
import 'package:external_repos/external_repos.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:flutter_svg/svg.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
final localeProvider = StateProvider<Locale>((ref) => const Locale('en'));
// final localeProvider = StateProvider<Locale>((ref) => const Locale('en'));
class CountryProfilePage extends ConsumerStatefulWidget {
const CountryProfilePage({Key? key}) : super(key: key);
// class CountryProfilePage extends ConsumerStatefulWidget {
// const CountryProfilePage({Key? key}) : super(key: key);
//
// @override
// ConsumerState<CountryProfilePage> createState() => _CountryProfilePageState();
// }
//
// class _CountryProfilePageState extends ConsumerState<CountryProfilePage> {
// final TextEditingController _searchController = TextEditingController();
//
// final List<Map<String, String>> _allCountries = [
// {"name": "Afghanistan", "flag": "🇦🇫",'code':'AF'},
// {"name": "Albania", "flag": "🇦🇱",'code':'AL'},
// {"name": "Algeria", "flag": "🇩🇿",'code':'DZ'},
// {"name": "American Samoa", "flag": "🇦🇸",'code':'AS'},
// {"name": "Andorra", "flag": "🇦🇩",'code':'AD'},
// {"name": "Angola", "flag": "🇦🇴",'code':'AO'},
// {"name": "Anguilla", "flag": "🇦🇮",'code':'AI'},
// {"name": "Antigua And Barbuda", "flag": "🇦🇬",'code':'AG'},
// {"name": "Argentina", "flag": "🇦🇷",'code':'AR'},
// {"name": "Armenia", "flag": "🇦🇲",'code':'AM'},
// {"name": "Aruba", "flag": "🇦🇼",'code':'AW'},
// {"name": "Australia", "flag": "🇦🇺",'code':'AU'},
// {"name": "Austria", "flag": "🇦🇹",'code':'AT'},
// {"name": "Azerbaijan", "flag": "🇦🇿",'code':'AZ'},
// {"name": "Bahamas", "flag": "🇧🇸",'code':'BS'},
// {"name": "Bahrain", "flag": "🇧🇭",'code':'BH'},
// {"name": "Bangladesh", "flag": "🇧🇩",'code':'BD'},
// ];
//
// String _searchTerm = '';
//
// void filterData(String value) {
// setState(() => _searchTerm = value);
// }
//
// @override
// Widget build(BuildContext context) {
// final locale = AppLocalizations.of(context)!;
// final filtered = _allCountries
// .where((c) => c['name']!.toLowerCase().contains(_searchTerm.toLowerCase()))
// .toList();
//
// double myheight = MediaQuery.of(context).size.height;
// double mywidth = MediaQuery.of(context).size.width;
//
// return PopScope(
// canPop: false,
// onPopInvokedWithResult: (didPop, result) {
// if (didPop) return;
// context.go('/myhomepage');
// },
// child: BaseScaffold(
// title: Text(
// context.translate(
// 'Country Profile',
// 'ملف الدولة',
// ),
// style: TextStyle(
// fontFamily: context.translate(
// 'Roboto',
// 'NotoKufi',
// )
// ),
// ),
// body: Column(
// children: [
// Padding(
// padding: const EdgeInsets.symmetric(horizontal: 12.0, vertical: 12.0),
// child: Container(
// decoration: BoxDecoration(
// color: Colors.white,
// borderRadius: BorderRadius.circular(30.0),
// border: Border.all(width: 1, color: Color(0xFFAA8E83)),
// ),
// child: TextField(
// controller: _searchController,
// onChanged: (value) {
// filterData(value);
// },
// decoration: InputDecoration(
// hintText: AppLocalizations.of(context)!.searchCountry,
// hintStyle: TextStyle(
// color: Color(0xFFAA8E83),
// fontFamily: context.translate('Roboto', 'NotoKufi'),
// fontSize: 14,
// height: 1.8,
// ),
// prefixIconConstraints: BoxConstraints(
// maxWidth: 42,
// maxHeight: 42,
// ),
// prefixIcon: Container(
// padding: EdgeInsets.only(right: 5, left: 5),
// alignment: Alignment.center,
// child: SvgPicture.asset(
// MiscIconAssetPath.Search,
// semanticsLabel: 'Search',
// colorFilter: ColorFilter.mode(Color(0xFFAA8E83), BlendMode.srcIn),
// height: 18,
// width: 18,
// ),
// ),
// suffixIcon: _searchController.text.isNotEmpty
// ? IconButton(
// icon: Icon(
// Icons.clear,
// color: Color(0xFFAA8E83),
// size: 18,
// ),
// onPressed: () {
// _searchController.clear();
// filterData('');
// },
// )
// : null,
// border: InputBorder.none,
// contentPadding: EdgeInsets.symmetric(vertical: 9, horizontal: 18.0),
// ),
// ),
// ),
// ),
//
// // Updated section for "No country found"
// Expanded(
// child: filtered.isEmpty
// ? Center(
// child: Text(
// 'No country found',
// style: TextStyle(
// fontSize: 16,
// color: Colors.grey,
// fontWeight: FontWeight.w500,
// ),
// ),
// )
// : ListView.builder(
// itemCount: filtered.length,
// itemBuilder: (context, index) {
// final country = filtered[index];
// return ListTile(
// leading: Text(
// country['flag']!,
// style: const TextStyle(fontSize: 24),
// ),
// title: Text(country['name']!),
// onTap: () {
// context.push('/country-profile-detail', extra: {
// 'countryName': country['name'] as String,
// 'flag': country['code'] as String,
// });
// },
// );
// },
// ),
// ),
// ],
// ),
// ),
// );
// }
// }
class ListCountriesRoute extends HookConsumerWidget {
const ListCountriesRoute({super.key});
@override
ConsumerState<CountryProfilePage> createState() => _CountryProfilePageState();
}
Widget build(BuildContext context, WidgetRef ref) {
final screenWidth = MediaQuery.of(context).size.width;
final _searchController = useTextEditingController();
final searchTerm = useState('');
class _CountryProfilePageState extends ConsumerState<CountryProfilePage> {
final TextEditingController _searchController = TextEditingController();
final filteredCountries = ISOCountry.values.where((country) {
final query = searchTerm.value.trim().toLowerCase();
if (query.isEmpty) return true; // 🔥 show all if search is empty
return country.nameEN.toLowerCase().contains(query) ||
country.nameAR.toLowerCase().contains(query);
}).toList();
final List<Map<String, String>> _allCountries = [
{"name": "Afghanistan", "flag": "🇦🇫",'code':'AF'},
{"name": "Albania", "flag": "🇦🇱",'code':'AL'},
{"name": "Algeria", "flag": "🇩🇿",'code':'DZ'},
{"name": "American Samoa", "flag": "🇦🇸",'code':'AS'},
{"name": "Andorra", "flag": "🇦🇩",'code':'AD'},
{"name": "Angola", "flag": "🇦🇴",'code':'AO'},
{"name": "Anguilla", "flag": "🇦🇮",'code':'AI'},
{"name": "Antigua And Barbuda", "flag": "🇦🇬",'code':'AG'},
{"name": "Argentina", "flag": "🇦🇷",'code':'AR'},
{"name": "Armenia", "flag": "🇦🇲",'code':'AM'},
{"name": "Aruba", "flag": "🇦🇼",'code':'AW'},
{"name": "Australia", "flag": "🇦🇺",'code':'AU'},
{"name": "Austria", "flag": "🇦🇹",'code':'AT'},
{"name": "Azerbaijan", "flag": "🇦🇿",'code':'AZ'},
{"name": "Bahamas", "flag": "🇧🇸",'code':'BS'},
{"name": "Bahrain", "flag": "🇧🇭",'code':'BH'},
{"name": "Bangladesh", "flag": "🇧🇩",'code':'BD'},
];
String _searchTerm = '';
void filterData(String value) {
setState(() => _searchTerm = value);
}
@override
Widget build(BuildContext context) {
final locale = AppLocalizations.of(context)!;
final filtered = _allCountries
.where((c) => c['name']!.toLowerCase().contains(_searchTerm.toLowerCase()))
.toList();
double myheight = MediaQuery.of(context).size.height;
double mywidth = MediaQuery.of(context).size.width;
return PopScope(
canPop: false,
onPopInvokedWithResult: (didPop, result) {
if (didPop) return;
context.go('/myhomepage');
},
child: BaseScaffold(
title: Text(
context.translate(
'Country Profile',
'ملف الدولة',
),
style: TextStyle(
fontFamily: context.translate(
'Roboto',
'NotoKufi',
)
),
),
body: Column(
children: [
Padding(
padding: const EdgeInsets.symmetric(horizontal: 12.0, vertical: 12.0),
child: Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(30.0),
border: Border.all(width: 1, color: Color(0xFFAA8E83)),
),
child: TextField(
controller: _searchController,
onChanged: (value) {
filterData(value);
},
decoration: InputDecoration(
hintText: AppLocalizations.of(context)!.searchCountry,
hintStyle: TextStyle(
color: Color(0xFFAA8E83),
fontFamily: context.translate('Roboto', 'NotoKufi'),
fontSize: 14,
height: 1.8,
),
prefixIconConstraints: BoxConstraints(
maxWidth: 42,
maxHeight: 42,
),
prefixIcon: Container(
padding: EdgeInsets.only(right: 5, left: 5),
alignment: Alignment.center,
child: SvgPicture.asset(
MiscIconAssetPath.Search,
semanticsLabel: 'Search',
colorFilter: ColorFilter.mode(Color(0xFFAA8E83), BlendMode.srcIn),
height: 18,
width: 18,
),
),
suffixIcon: _searchController.text.isNotEmpty
? IconButton(
icon: Icon(
Icons.clear,
color: Color(0xFFAA8E83),
size: 18,
),
onPressed: () {
_searchController.clear();
filterData('');
},
)
: null,
border: InputBorder.none,
contentPadding: EdgeInsets.symmetric(vertical: 9, horizontal: 18.0),
),
),
final body = BaseScaffold(
body: Column(
children: [
Padding(
padding: const EdgeInsets.symmetric(horizontal: 12.0, vertical: 12.0),
child: Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(30.0),
border: Border.all(width: 1, color: Color(0xFFAA8E83)),
),
),
// Updated section for "No country found"
Expanded(
child: filtered.isEmpty
? Center(
child: Text(
'No country found',
style: TextStyle(
fontSize: 16,
color: Colors.grey,
fontWeight: FontWeight.w500,
child: SearchBar(
constraints: BoxConstraints(
maxWidth: MediaQuery.of(context).size.width*0.9,
maxHeight: 50,
),
elevation: WidgetStatePropertyAll(0),
backgroundColor: WidgetStatePropertyAll(Colors.white),
controller: _searchController,
hintText: AppLocalizations.of(context)!.searchCountry,
hintStyle: WidgetStateProperty.all(
TextStyle(
color: Color(0xFFAA8E83),
fontFamily: context.translate('Roboto', 'NotoKufi'),
fontSize: 14,
height: 1.8,
),
),
)
: ListView.builder(
itemCount: filtered.length,
itemBuilder: (context, index) {
final country = filtered[index];
return ListTile(
leading: Text(
country['flag']!,
style: const TextStyle(fontSize: 24),
),
title: Text(country['name']!),
onTap: () {
context.push('/country-profile-detail', extra: {
'countryName': country['name'] as String,
'flag': country['code'] as String,
});
},
);
leading: Container(
padding: EdgeInsets.only(right: 5, left: 5),
alignment: Alignment.center,
constraints: BoxConstraints(
maxWidth: 42,
maxHeight: 42,
),
child: SvgPicture.asset(
MiscIconAssetPath.Search,
semanticsLabel: 'Search',
colorFilter: ColorFilter.mode(Color(0xFFAA8E83), BlendMode.srcIn),
height: 18,
width: 18,
),
),
onChanged: (value){
searchTerm.value=value;
},
),
),
],
),
Expanded(
child: ValueListenableBuilder(
valueListenable: _searchController,
builder: (context, value, child){
if (filteredCountries.isEmpty) {
return Center(
child: Text(
context.translate(
'No countries match your search term.',
'لا توجد بلدان تتطابق مع مصطلح البحث الخاص بك.',
),
),
);
}
return ListView.builder(
itemCount: filteredCountries.length,
itemBuilder: (context, index)=> _CountryListTile(
key: ValueKey(filteredCountries[index].alpha2),
countryCode: filteredCountries[index].alpha2,), );
},),
)
],
), title: Text('Country Profile'),
);
return body;
}
}
class _CountryListTile extends ConsumerWidget {
const _CountryListTile({
required super.key,
required this.countryCode,
});
final String countryCode;
@override
Widget build(BuildContext context, WidgetRef ref) {
final country = ISOCountry.fromAlpha2(countryCode);
final flag = Image.asset(
country.flagImgPath,
fit: BoxFit.contain,
height: 18,
width: 18 * (3 / 2),
cacheHeight: 32,
cacheWidth: 48,
);
return ListTile(
leading: flag,
contentPadding: const EdgeInsets.symmetric(
horizontal: 24,
vertical: 0,
),
),
dense: true,
minTileHeight: 40,
title: Text(
context.translate(
country.nameEN,
country.nameAR,
),
style: TextStyle(
fontFamily: context.translate(
'Roboto',
'NotoKufi',
),
fontSize: 14,
fontWeight: FontWeight.w400,
),
),
onTap: () => context.push('/country-profile-detail', extra: {
'countryName': country.nameEN,
'flag': country.alpha2,
})
);
}
}