format static method

String format(
  1. dynamic amount,
  2. CurrencyFormat settings, {
  3. bool compact = false,
  4. int decimal = 2,
  5. dynamic showThousandSeparator = true,
  6. dynamic enforceDecimals = false,
})

Format amount using the settings of a currency.

If compact is true the compact form will be used. e.g. '$ 1.23K' instead of '$ 1,230'.

decimal is the number of decimal places used when rounding. e.g. '$ 45.5' (1 decimal place), '$ 45.52' (2 decimal places).

If showThousandSeparator is set to false, the thousand separator won't be shown. e.g. '$ 1200'instead of '$ 1,200'.

If enforceDecimals is set to true, decimals will be shown even if it is an integer. e.g. '$ 5.00' instead of '$ 5'.

Implementation

static String format(
  amount,
  CurrencyFormat settings, {
  bool compact = false,
  int decimal = 2,
  showThousandSeparator = true,
  enforceDecimals = false,
}) {
  amount = double.parse('$amount');
  late String number;
  String letter = '';

  if (compact) {
    for (int i = 0; i < _letters.length; i++) {
      if (amount.abs() >= _letters.keys.elementAt(i)) {
        letter = _letters.values.elementAt(i);
        amount /= _letters.keys.elementAt(i);
        break;
      }
    }
    number = amount.toStringAsPrecision(3);
    number = number.replaceAll('.', settings.decimalSeparator);
  } else {
    number = amount.toStringAsFixed(decimal);
    if (!enforceDecimals &&
        double.parse(number) == double.parse(number).round()) {
      number = double.parse(number).round().toString();
    }
    number = number.replaceAll('.', settings.decimalSeparator);
    if (showThousandSeparator) {
      String oldNum = number.split(settings.decimalSeparator)[0];
      number = number.contains(settings.decimalSeparator)
          ? settings.decimalSeparator +
              number.split(settings.decimalSeparator)[1]
          : '';
      for (int i = 0; i < oldNum.length; i++) {
        number = oldNum[oldNum.length - i - 1] + number;
        if ((i + 1) % 3 == 0 &&
            i < oldNum.length - (oldNum.startsWith('-') ? 2 : 1)) {
          number = settings.thousandSeparator + number;
        }
      }
    }
  }
  switch (settings.symbolSide) {
    case SymbolSide.left:
      return '${settings.symbol}${settings.symbolSeparator}$number$letter';
    case SymbolSide.right:
      return '$number$letter${settings.symbolSeparator}${settings.symbol}';
    default:
      return '$number$letter';
  }
}