toStorageUnit method

String toStorageUnit([
  1. int round = 2
])

b KB MB GB TB PB

Implementation

String toStorageUnit([int round = 2]) {
  int divider = 1024;
  if (this < divider) {
    return '$this B';
  }
  if (this < divider * divider && this % divider == 0) {
    return '${(this / divider).toStringAsFixed(0)} KB';
  }

  if (this < divider * divider) {
    return '${(this / divider).toStringAsFixed(round)} KB';
  }

  if (this < divider * divider * divider && this % (divider * divider) == 0) {
    return '${(this / (divider * divider)).toStringAsFixed(0)} MB';
  }

  if (this < divider * divider * divider) {
    return '${(this / divider / divider).toStringAsFixed(round)} MB';
  }

  if (this < divider * divider * divider * divider &&
      this % (divider * divider * divider) == 0) {
    return '${(this / (divider * divider * divider)).toStringAsFixed(0)} GB';
  }

  if (this < divider * divider * divider * divider) {
    return '${(this / divider / divider / divider).toStringAsFixed(round)} GB';
  }

  if (this < divider * divider * divider * divider * divider &&
      this % (divider / divider / divider / divider) == 0) {
    num r = this / divider / divider / divider / divider;
    return '${r.toStringAsFixed(0)} TB';
  }
  if (this < divider * divider * divider * divider * divider) {
    num r = this / divider / divider / divider / divider;
    return '${r.toStringAsFixed(round)} TB';
  }
  if (this < divider * divider * divider * divider * divider * divider &&
      this % (divider / divider / divider / divider / divider) == 0) {
    num r = this / divider / divider / divider / divider / divider;
    return '${r.toStringAsFixed(0)} PB';
  } else {
    num r = this / divider / divider / divider / divider / divider;
    return '${r.toStringAsFixed(round)} PB';
  }
}