mena 1.0.1 copy "mena: ^1.0.1" to clipboard
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.

example/mena_example.dart

/// 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!');
}
1
likes
160
points
153
downloads

Publisher

verified publishermomaher.dev

Weekly Downloads

Comprehensive offline MENA country data with Arabic-first localization, ISO codes, currencies, and dial codes. Includes automatic locale switching and Arabic/English support.

Repository (GitHub)
View/report issues

Topics

#countries #mena #arabic #currency #flags

Documentation

API reference

Funding

Consider supporting this project:

github.com

License

MIT (license)

More

Packages that depend on mena