formatCell function

String formatCell(
  1. dynamic value,
  2. ColumnFormat format, {
  3. String locale = 'de-DE',
  4. String currency = 'EUR',
})

Formats one table or aggregate value using format.

Implementation

String formatCell(
  dynamic value,
  ColumnFormat format, {
  String locale = 'de-DE',
  String currency = 'EUR',
}) {
  if (value == null) return '';
  if (format == ColumnFormat.text) return value.toString();
  final number = value is num
      ? value.toDouble()
      : double.tryParse(value.toString().replaceAll(',', '.'));
  if (number == null) return value.toString();
  final parts = number.abs().toStringAsFixed(2).split('.');
  final grouped = parts.first.replaceAllMapped(
    RegExp(r'\B(?=(\d{3})+(?!\d))'),
    (_) => locale.startsWith('en')
        ? ','
        : locale.endsWith('CH')
        ? '’'
        : '.',
  );
  final decimal = locale.startsWith('en') ? '.' : ',';
  final formatted = '${number < 0 ? '-' : ''}$grouped$decimal${parts.last}';
  if (format != ColumnFormat.currency) return formatted;
  final symbol =
      const {
        'EUR': '€',
        'USD': r'$',
        'CHF': 'CHF',
        'GBP': '£',
        'JPY': '¥',
      }[currency] ??
      currency;
  return locale.startsWith('en') ? '$symbol$formatted' : '$formatted $symbol';
}