formatFileSize function
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]}';
}