42 lines
1.3 KiB
Dart
42 lines
1.3 KiB
Dart
import 'package:pshared/models/money.dart';
|
|
import 'package:pshared/utils/currency.dart';
|
|
|
|
|
|
double parseMoneyAmount(String? raw, {double fallback = 0}) {
|
|
final trimmed = raw?.trim();
|
|
if (trimmed == null || trimmed.isEmpty) return fallback;
|
|
return double.tryParse(trimmed) ?? fallback;
|
|
}
|
|
|
|
String formatMoneyDisplay(
|
|
Money? money, {
|
|
String fallback = '--',
|
|
String separator = ' ',
|
|
String invalidAmountFallback = '',
|
|
}) {
|
|
if (money == null) return fallback;
|
|
|
|
final rawAmount = money.amount.trim();
|
|
final rawCurrency = money.currency.trim();
|
|
final parsedAmount = parseMoneyAmount(rawAmount, fallback: double.nan);
|
|
final amountToken = parsedAmount.isNaN
|
|
? (rawAmount.isEmpty ? invalidAmountFallback : rawAmount)
|
|
: amountToString(parsedAmount);
|
|
|
|
final symbol = currencySymbolFromCode(rawCurrency);
|
|
final normalizedSymbol = symbol?.trim() ?? '';
|
|
final hasSymbol = normalizedSymbol.isNotEmpty;
|
|
final currencyToken = hasSymbol ? normalizedSymbol : rawCurrency;
|
|
final first = amountToken;
|
|
final second = currencyToken;
|
|
|
|
if (first.isEmpty && second.isEmpty) return fallback;
|
|
if (first.isEmpty) return second;
|
|
if (second.isEmpty) return first;
|
|
return '$first$separator$second';
|
|
}
|
|
|
|
extension MoneyAmountX on Money {
|
|
double get amountValue => parseMoneyAmount(amount);
|
|
}
|