mena 1.0.1
mena: ^1.0.1 copied to clipboard
Comprehensive offline MENA country data with Arabic-first localization, ISO codes, currencies, and dial codes. Includes automatic locale switching and Arabic/English support.
/// Comprehensive example demonstrating the MENA package capabilities.
///
/// This file showcases all major features including search methods,
/// data access, localization, and practical use cases.
library;
import 'package:mena/mena.dart';
void main() {
print('=== MENA Package Demo ===\n');
// Basic search demonstrations
_demonstrateSearchMethods();
// Data collections exploration
_exploreDataCollections();
// Localization features
_demonstrateLocalization();
// Practical use cases
_practicalUseCases();
// Error handling examples
_errorHandlingExamples();
}
/// Demonstrates all available search methods
void _demonstrateSearchMethods() {
print('š Search Methods Demo:');
print('------------------------');
// 1. Search by ISO country code
final palestine = MENA.getBy(query: 'ps', key: MenaKeys.code);
print('By Code (ps): ${palestine?.country.englishName}');
// 2. Search by English name (partial matching)
final morocco = MENA.getBy(query: 'Morocco', key: MenaKeys.englishName);
print('By Name (Morocco): ${morocco?.country.officalEN}');
// 3. Search by international dial code
final uae = MENA.getBy(query: '971', key: MenaKeys.dialCode);
print(
'By Dial Code (971): ${uae?.country.englishName} - Currency: ${uae?.currency}',
);
// 4. Search by currency code
final saudi = MENA.getBy(query: 'SAR', key: MenaKeys.currencyCode);
print('By Currency (SAR): ${saudi?.country.englishName}');
// 5. Direct index access
final firstCountry = MENA.getBy(query: '0', key: MenaKeys.code);
print('By Index (0): ${firstCountry?.country.englishName}');
print('');
}
/// Explores the different data collections
void _exploreDataCollections() {
print('š Data Collections:');
print('---------------------');
print('Total MENA Countries: ${MENA.allCountries.length}'); // 19
print('Middle East Countries: ${MENA.middleEast.length}'); // 12
print('North Africa Countries: ${MENA.northAfrica.length}'); // 7
// List all Middle East countries
print('\nMiddle East Countries:');
for (final country in MENA.middleEast) {
print(' ⢠${country.country.englishName} (+${country.country.dialCode})');
}
// List all North Africa countries
print('\nNorth Africa Countries:');
for (final country in MENA.northAfrica) {
print(' ⢠${country.country.englishName} (${country.currency})');
}
print('');
}
/// Demonstrates localization features
void _demonstrateLocalization() {
print('š Localization Demo:');
print('----------------------');
final palestine = MENA.getBy(query: 'ps', key: MenaKeys.code);
if (palestine != null) {
print('Country: ${palestine.country.code.toUpperCase()} (Palestine)');
print('English Common: ${palestine.country.englishName}');
print('English Official: ${palestine.country.officalEN}');
print('Arabic Common: ${palestine.country.arabicName}'); // ŁŁŲ³Ų·ŁŁ
print('Arabic Official: ${palestine.country.officalAR}'); // ŲÆŁŁŲ© ŁŁŲ³Ų·ŁŁ
print('Palestine Flag URL: ${palestine.getSvgUrl}');
print(
'Small Palestine Emoji (24x18): ${palestine.getEmojiUrl(EmojiSize.size24x18)}',
);
print(
'Medium Palestine Emoji (48x36): ${palestine.getEmojiUrl(EmojiSize.size48x36)}',
);
print(
'Large Palestine Emoji (128x96): ${palestine.getEmojiUrl(EmojiSize.size128x96)}',
);
print(
'Small Palestine Image JPEG (w40): ${palestine.getImageUrl(ImageSize.w40)}',
);
print(
'Medium Palestine Image PNG (w160): ${palestine.getImageUrl(ImageSize.w160, ImageType.png)}',
);
print(
'Large Palestine Image JPEG (w640): ${palestine.getImageUrl(ImageSize.w640, ImageType.jpeg)}',
);
print(
'Height-based PNG (h60): ${palestine.getImageUrl(ImageSize.h60, ImageType.png)}',
);
print(
'Height-based JPEG (h120): ${palestine.getImageUrl(ImageSize.h120, ImageType.jpeg)}',
);
}
print('');
}
/// Shows practical real-world use cases
void _practicalUseCases() {
print('š¼ Practical Use Cases:');
print('------------------------');
// Phone number formatting with Palestine
print('š± Phone Number Formatting (Palestine):');
final phoneCountry = MENA.getBy(query: '970', key: MenaKeys.dialCode);
if (phoneCountry != null) {
final localNumber = '501234567';
final international = '${phoneCountry.dialCodeWithPlus}$localNumber';
print(' Local: $localNumber');
print(' International: $international');
print(' Formatted Code: ${phoneCountry.dialCodeWithPlus}');
print(
' Country: ${phoneCountry.country.englishName} (${phoneCountry.country.arabicName})',
);
}
// E-commerce currency display including Palestine
print('\nš° E-commerce Currency:');
final currencies = ['EGP', 'AED', 'SAR', 'ILS']; // Egypt first
for (final currencyCode in currencies) {
final country = MENA.getBy(query: currencyCode, key: MenaKeys.currencyCode);
if (country != null) {
final currency = country.currency;
print(' ${currency.code}: ${currency.type}');
}
}
// JSON serialization for API with Palestine
print('\nš” JSON Serialization (Palestine):');
final apiCountry = MENA.getBy(query: 'ps', key: MenaKeys.code);
if (apiCountry != null) {
print(apiCountry.toJson());
}
print('');
}
/// Demonstrates proper error handling
void _errorHandlingExamples() {
print('ā ļø Error Handling:');
print('--------------------');
// Null safety examples
print('Safe null handling:');
final invalidCode = MENA.getBy(query: 'xyz', key: MenaKeys.code);
print(' Invalid code result: ${invalidCode ?? 'null (as expected)'}');
final invalidIndex = MENA.getBy(query: '100', key: MenaKeys.code);
print(' Out of bounds index: ${invalidIndex ?? 'null (as expected)'}');
final invalidCurrency = MENA.getBy(query: 'USD', key: MenaKeys.currencyCode);
print(' Non-MENA currency: ${invalidCurrency ?? 'null (as expected)'}');
// Safe property access
final safeExample = MENA.getBy(query: 'eg', key: MenaKeys.code);
final safeName = safeExample?.country.englishName ?? 'Unknown Country';
final safeCurrency = safeExample?.currency ?? 'N/A';
print(' Safe access: $safeName uses $safeCurrency');
print('\nā
Demo completed successfully!');
}