77 lines
3.6 KiB
Dart
77 lines
3.6 KiB
Dart
import 'package:intl/intl.dart';
|
|
|
|
class CurrencyInfo {
|
|
final String code;
|
|
final String name;
|
|
final String symbol;
|
|
|
|
const CurrencyInfo({
|
|
required this.code,
|
|
required this.name,
|
|
required this.symbol,
|
|
});
|
|
}
|
|
|
|
class CurrencyUtils {
|
|
static const List<CurrencyInfo> allCurrencies = [
|
|
CurrencyInfo(code: 'USD', name: 'US Dollar', symbol: r'$'),
|
|
CurrencyInfo(code: 'EUR', name: 'Euro', symbol: '€'),
|
|
CurrencyInfo(code: 'GBP', name: 'British Pound', symbol: '£'),
|
|
CurrencyInfo(code: 'JPY', name: 'Japanese Yen', symbol: '¥'),
|
|
CurrencyInfo(code: 'MXN', name: 'Mexican Peso', symbol: r'MX$'),
|
|
CurrencyInfo(code: 'COP', name: 'Colombian Peso', symbol: r'$'),
|
|
CurrencyInfo(code: 'ARS', name: 'Argentine Peso', symbol: r'$'),
|
|
CurrencyInfo(code: 'PEN', name: 'Peruvian Sol', symbol: 'S/'),
|
|
CurrencyInfo(code: 'CLP', name: 'Chilean Peso', symbol: r'$'),
|
|
CurrencyInfo(code: 'BRL', name: 'Brazilian Real', symbol: r'R$'),
|
|
CurrencyInfo(code: 'CAD', name: 'Canadian Dollar', symbol: r'CA$'),
|
|
CurrencyInfo(code: 'AUD', name: 'Australian Dollar', symbol: r'A$'),
|
|
CurrencyInfo(code: 'CHF', name: 'Swiss Franc', symbol: 'CHF'),
|
|
CurrencyInfo(code: 'CNY', name: 'Chinese Yuan', symbol: '¥'),
|
|
CurrencyInfo(code: 'INR', name: 'Indian Rupee', symbol: '₹'),
|
|
CurrencyInfo(code: 'KRW', name: 'South Korean Won', symbol: '₩'),
|
|
CurrencyInfo(code: 'SEK', name: 'Swedish Krona', symbol: 'kr'),
|
|
CurrencyInfo(code: 'NOK', name: 'Norwegian Krone', symbol: 'kr'),
|
|
CurrencyInfo(code: 'NZD', name: 'New Zealand Dollar', symbol: r'NZ$'),
|
|
CurrencyInfo(code: 'UYU', name: 'Uruguayan Peso', symbol: r'$U'),
|
|
CurrencyInfo(code: 'PYG', name: 'Paraguayan Guarani', symbol: '₲'),
|
|
CurrencyInfo(code: 'BOB', name: 'Bolivian Boliviano', symbol: 'Bs'),
|
|
CurrencyInfo(code: 'CRC', name: 'Costa Rican Colón', symbol: '₡'),
|
|
CurrencyInfo(code: 'DOP', name: 'Dominican Peso', symbol: r'RD$'),
|
|
CurrencyInfo(code: 'GTQ', name: 'Guatemalan Quetzal', symbol: 'Q'),
|
|
CurrencyInfo(code: 'HNL', name: 'Honduran Lempira', symbol: 'L'),
|
|
CurrencyInfo(code: 'NIO', name: 'Nicaraguan Córdoba', symbol: r'C$'),
|
|
CurrencyInfo(code: 'PAB', name: 'Panamanian Balboa', symbol: 'B/.'),
|
|
CurrencyInfo(code: 'VES', name: 'Venezuelan Bolívar', symbol: 'Bs.S'),
|
|
CurrencyInfo(code: 'SGD', name: 'Singapore Dollar', symbol: r'S$'),
|
|
CurrencyInfo(code: 'HKD', name: 'Hong Kong Dollar', symbol: r'HK$'),
|
|
CurrencyInfo(code: 'TRY', name: 'Turkish Lira', symbol: '₺'),
|
|
CurrencyInfo(code: 'TWD', name: 'Taiwan Dollar', symbol: r'NT$'),
|
|
CurrencyInfo(code: 'THB', name: 'Thai Baht', symbol: '฿'),
|
|
CurrencyInfo(code: 'ZAR', name: 'South African Rand', symbol: 'R'),
|
|
CurrencyInfo(code: 'ILS', name: 'Israeli Shekel', symbol: '₪'),
|
|
CurrencyInfo(code: 'DKK', name: 'Danish Krone', symbol: 'kr'),
|
|
CurrencyInfo(code: 'PLN', name: 'Polish Zloty', symbol: 'zł'),
|
|
];
|
|
|
|
static const _zeroDecimal = {'JPY', 'KRW', 'CLP', 'PYG', 'COP'};
|
|
|
|
static String getSymbol(String code) {
|
|
final idx = allCurrencies.indexWhere((c) => c.code == code);
|
|
return idx >= 0 ? allCurrencies[idx].symbol : r'$';
|
|
}
|
|
|
|
static String getDisplayName(String code) {
|
|
final idx = allCurrencies.indexWhere((c) => c.code == code);
|
|
return idx >= 0 ? '${allCurrencies[idx].code} - ${allCurrencies[idx].name}' : code;
|
|
}
|
|
|
|
static String formatPrice(double amount, String code) {
|
|
final symbol = getSymbol(code);
|
|
final fmt = _zeroDecimal.contains(code)
|
|
? NumberFormat('#,##0')
|
|
: NumberFormat('#,##0.00');
|
|
return '$symbol${fmt.format(amount)}';
|
|
}
|
|
}
|