refactor of money utils with new money2 package
This commit is contained in:
@@ -1,102 +1,78 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:money2/money2.dart';
|
||||
|
||||
import 'package:pshared/models/asset.dart';
|
||||
import 'package:pshared/models/currency.dart';
|
||||
|
||||
|
||||
const nonBreakingSpace = '\u00A0';
|
||||
final Currency _usdtCurrency = Currency.create(
|
||||
'USDT',
|
||||
6,
|
||||
symbol: '₮',
|
||||
isIso: false,
|
||||
country: 'Digital',
|
||||
unit: 'Tether',
|
||||
name: 'Tether',
|
||||
);
|
||||
|
||||
String withTrailingNonBreakingSpace(String value) {
|
||||
return '$value$nonBreakingSpace';
|
||||
}
|
||||
final Currency _usdcCurrency = Currency.create(
|
||||
'USDC',
|
||||
6,
|
||||
symbol: r'($)',
|
||||
isIso: false,
|
||||
country: 'Digital',
|
||||
unit: 'USD Coin',
|
||||
name: 'USD Coin',
|
||||
);
|
||||
|
||||
String joinWithNonBreakingSpace(String left, String right) {
|
||||
return '$left$nonBreakingSpace$right';
|
||||
}
|
||||
final Map<String, Currency> _commonCurrenciesByCode =
|
||||
<String, Currency>{
|
||||
for (final currency in CommonCurrencies().asList())
|
||||
currency.isoCode: currency,
|
||||
_usdtCurrency.isoCode: _usdtCurrency,
|
||||
_usdcCurrency.isoCode: _usdcCurrency,
|
||||
};
|
||||
|
||||
String currencyCodeToSymbol(Currency currencyCode) {
|
||||
switch (currencyCode) {
|
||||
case Currency.usd:
|
||||
return '\$';
|
||||
case Currency.usdt:
|
||||
return '₮';
|
||||
case Currency.usdc:
|
||||
return '\$';
|
||||
case Currency.rub:
|
||||
return '₽';
|
||||
case Currency.eur:
|
||||
return '€';
|
||||
String currencyCodeToSymbol(CurrencyCode currencyCode) {
|
||||
final symbol = currencySymbolFromCode(currencyCodeToString(currencyCode));
|
||||
if (symbol == null || symbol.trim().isEmpty) {
|
||||
return currencyCodeToString(currencyCode);
|
||||
}
|
||||
return symbol;
|
||||
}
|
||||
|
||||
String amountToString(double amount) {
|
||||
return amount.toStringAsFixed(2);
|
||||
}
|
||||
|
||||
String currencyToString(Currency currencyCode, double amount) {
|
||||
return joinWithNonBreakingSpace(
|
||||
currencyCodeToSymbol(currencyCode),
|
||||
amountToString(amount),
|
||||
);
|
||||
}
|
||||
|
||||
String assetToString(Asset asset) {
|
||||
return currencyToString(asset.currency, asset.amount);
|
||||
}
|
||||
|
||||
Currency currencyStringToCode(String currencyCode) {
|
||||
switch (currencyCode) {
|
||||
case 'USD':
|
||||
return Currency.usd;
|
||||
case 'USDT':
|
||||
return Currency.usdt;
|
||||
case 'USDC':
|
||||
return Currency.usdc;
|
||||
case 'RUB':
|
||||
return Currency.rub;
|
||||
case 'EUR':
|
||||
return Currency.eur;
|
||||
default:
|
||||
throw ArgumentError('Unknown currency code: $currencyCode');
|
||||
String currencyToString(CurrencyCode currencyCode, double amount) {
|
||||
final code = currencyCodeToString(currencyCode);
|
||||
final currency = money2CurrencyFromCode(code);
|
||||
if (currency == null) {
|
||||
return '$amount $code';
|
||||
}
|
||||
final money = Money.fromNumWithCurrency(amount, currency);
|
||||
return money.toString();
|
||||
}
|
||||
|
||||
String currencyCodeToString(Currency currencyCode) {
|
||||
switch (currencyCode) {
|
||||
case Currency.usd:
|
||||
return 'USD';
|
||||
case Currency.usdt:
|
||||
return 'USDT';
|
||||
case Currency.usdc:
|
||||
return 'USDC';
|
||||
case Currency.rub:
|
||||
return 'RUB';
|
||||
case Currency.eur:
|
||||
return 'EUR';
|
||||
CurrencyCode currencyStringToCode(String currencyCode) {
|
||||
final normalized = currencyCode.trim().toUpperCase();
|
||||
for (final value in CurrencyCode.values) {
|
||||
if (currencyCodeToString(value) == normalized) {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
throw ArgumentError('Unknown currency code: $currencyCode');
|
||||
}
|
||||
|
||||
IconData iconForCurrencyType(Currency currencyCode) {
|
||||
switch (currencyCode) {
|
||||
case Currency.usd:
|
||||
return Icons.currency_exchange;
|
||||
case Currency.eur:
|
||||
return Icons.currency_exchange;
|
||||
case Currency.rub:
|
||||
return Icons.currency_ruble;
|
||||
case Currency.usdt:
|
||||
return Icons.currency_exchange;
|
||||
case Currency.usdc:
|
||||
return Icons.money;
|
||||
}
|
||||
String currencyCodeToString(CurrencyCode currencyCode) {
|
||||
return currencyCode.name.toUpperCase();
|
||||
}
|
||||
|
||||
String? currencySymbolFromCode(String? code) {
|
||||
final normalized = code?.trim();
|
||||
if (normalized == null || normalized.isEmpty) return null;
|
||||
try {
|
||||
return currencyCodeToSymbol(currencyStringToCode(normalized.toUpperCase()));
|
||||
} catch (_) {
|
||||
return null;
|
||||
}
|
||||
final currency = money2CurrencyFromCode(code);
|
||||
if (currency == null) return null;
|
||||
final symbol = currency.symbol.trim();
|
||||
return symbol.isEmpty ? null : symbol;
|
||||
}
|
||||
|
||||
Currency? money2CurrencyFromCode(String? code) {
|
||||
final normalized = code?.trim().toUpperCase();
|
||||
if (normalized == null || normalized.isEmpty) return null;
|
||||
return _commonCurrenciesByCode[normalized] ?? Currencies().find(normalized);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user