36 lines
942 B
Dart
36 lines
942 B
Dart
import 'package:money2/money2.dart';
|
|
import 'package:pshared/utils/currency.dart';
|
|
|
|
const String _decimalMoneyPattern = '0.##################';
|
|
|
|
Money? parseMoneyWithCurrency(String? amount, Currency? currency) {
|
|
if (currency == null) return null;
|
|
final value = _normalizeMoneyAmount(amount);
|
|
if (value == null || value.isEmpty) return null;
|
|
|
|
try {
|
|
return Money.parseWithCurrency(
|
|
value,
|
|
currency,
|
|
pattern: _decimalMoneyPattern,
|
|
);
|
|
} catch (_) {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
Money? parseMoneyWithCurrencyCode(String? amount, String? currencyCode) {
|
|
return parseMoneyWithCurrency(amount, money2CurrencyFromCode(currencyCode));
|
|
}
|
|
|
|
String? _normalizeMoneyAmount(String? value) {
|
|
final normalized = value?.trim();
|
|
if (normalized == null || normalized.isEmpty) return null;
|
|
|
|
if (normalized.contains(',') && !normalized.contains('.')) {
|
|
return normalized.replaceAll(',', '.');
|
|
}
|
|
|
|
return normalized;
|
|
}
|