formatFileSize function

String formatFileSize(
  1. int bytes,
  2. SizeUnitLocale unit
)

Formats a file size in bytes to a human-readable string.

Converts byte values to appropriate units (B, KB, MB, GB, etc.) based on the provided locale unit configuration.

Parameters:

  • bytes (int, required): File size in bytes.
  • unit (SizeUnitLocale, required): Unit locale configuration.

Returns: String — formatted file size with unit.

Example:

formatFileSize(1024, SizeUnitLocale.fileBytes) // "1 KB"
formatFileSize(1536, SizeUnitLocale.fileBytes) // "1.5 KB"

Implementation

String formatFileSize(int bytes, SizeUnitLocale unit) {
  if (bytes <= 0) return '0 ${unit.units[0]}';
  final base = unit.base;
  final units = unit.units;
  int digitGroups = (_log10(bytes) / _log10(base)).floor();
  // return '${NumberFormat('#,##0.#').format(bytes / pow(base, digitGroups))} ${units[digitGroups]}';
  // do it without NumberFormat, but format to #,##0.# format
  final value = bytes / pow(base, digitGroups);
  final formattedValue =
      value.toStringAsFixed(value.truncateToDouble() == value ? 0 : 1);
  return '$formattedValue ${units[digitGroups]}';
}