Line data Source code
1 : /// A method returns a human readable string representing a file _size
2 1 : String filesize(dynamic size, [int round = 2]) {
3 : /**
4 : * [size] can be passed as number or as string
5 : *
6 : * the optional parameter [round] specifies the number
7 : * of digits after comma/point (default is 2)
8 : */
9 : int divider = 1024;
10 : int _size;
11 : try {
12 2 : _size = int.parse(size.toString());
13 : } catch (e) {
14 0 : throw ArgumentError("Can not parse the size parameter: $e");
15 : }
16 :
17 2 : if (_size < divider) return "$_size B";
18 :
19 4 : if (_size < divider * divider && _size % divider == 0)
20 3 : return "${(_size / divider).toStringAsFixed(0)} KB";
21 :
22 2 : if (_size < divider * divider)
23 3 : return "${(_size / divider).toStringAsFixed(round)} KB";
24 :
25 5 : if (_size < divider * divider * divider && _size % divider == 0)
26 0 : return "${(_size / (divider * divider)).toStringAsFixed(0)} MB";
27 :
28 3 : if (_size < divider * divider * divider)
29 4 : return "${(_size / divider / divider).toStringAsFixed(round)} MB";
30 :
31 4 : if (_size < divider * divider * divider * divider && _size % divider == 0)
32 0 : return "${(_size / (divider * divider * divider)).toStringAsFixed(0)} GB";
33 :
34 4 : if (_size < divider * divider * divider * divider)
35 0 : return "${(_size / divider / divider / divider).toStringAsFixed(round)} GB";
36 :
37 5 : if (_size < divider * divider * divider * divider * divider &&
38 0 : _size % divider == 0) {
39 0 : num r = _size / divider / divider / divider / divider;
40 0 : return "${r.toStringAsFixed(0)} TB";
41 : }
42 :
43 5 : if (_size < divider * divider * divider * divider * divider) {
44 0 : num r = _size / divider / divider / divider / divider;
45 0 : return "${r.toStringAsFixed(round)} TB";
46 : }
47 :
48 6 : if (_size < divider * divider * divider * divider * divider * divider &&
49 2 : _size % divider == 0) {
50 0 : num r = _size / divider / divider / divider / divider / divider;
51 0 : return "${r.toStringAsFixed(0)} PB";
52 : } else {
53 5 : num r = _size / divider / divider / divider / divider / divider;
54 2 : return "${r.toStringAsFixed(round)} PB";
55 : }
56 : }
|