/
Bijlage.dart
127 lines (119 loc) · 3.91 KB
/
Bijlage.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
import 'package:argo/src/utils/hive/adapters.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:filesize/filesize.dart';
enum DownloadState { done, loading, none }
class BijlageItem extends StatelessWidget {
final Bron bijlage;
final Function onTap;
final Border border;
final ValueNotifier<DownloadState> downloadState = ValueNotifier(DownloadState.none);
final Future Function(Bron, Function(int, int)) download;
final ValueNotifier<int> downloadCount = ValueNotifier(0);
BijlageItem(
this.bijlage, {
this.onTap,
this.download,
this.border,
});
Widget build(BuildContext context) {
List<String> splittedNaam = bijlage.naam.split(".");
return Tooltip(
message: bijlage.naam,
child: ListTile(
onTap: () {
if (onTap != null) onTap();
if (download != null) {
downloadState.value = DownloadState.loading;
download(
bijlage,
(count, total) {
bijlage.downloadCount = count;
downloadCount.value = count;
if (count >= total) {
downloadState.value = DownloadState.done;
}
},
);
}
},
leading: bijlage.isFolder
? Icon(Icons.folder_outlined)
: Column(
children: [
Padding(
padding: EdgeInsets.only(
top: 5,
),
child: Icon(
Icons.insert_drive_file_outlined,
),
),
Padding(
padding: EdgeInsets.only(
top: 7.5,
),
child: Text(
splittedNaam.length > 1 ? splittedNaam.last.toUpperCase() : bijlage.naam,
style: TextStyle(
fontSize: 12.5,
),
),
)
],
),
subtitle: bijlage.isFolder
? null
: Padding(
child: ValueListenableBuilder(
valueListenable: downloadCount,
builder: (context, value, child) => downloadState.value == DownloadState.loading
? Text(filesize(downloadCount.value) + "/" + filesize(bijlage.size))
: Text(
filesize(bijlage.size),
),
),
padding: EdgeInsets.only(
bottom: 5,
),
),
title: Padding(
child: Text(
splittedNaam.length > 1 ? splittedNaam.take(splittedNaam.length - 1).join(".") : bijlage.naam,
overflow: TextOverflow.ellipsis,
),
padding: EdgeInsets.symmetric(
vertical: 10,
),
),
trailing: bijlage.isFolder
? Icon(
Icons.arrow_forward_ios,
size: 14,
)
: ValueListenableBuilder<DownloadState>(
valueListenable: downloadState,
builder: (c, state, _) {
switch (state) {
case DownloadState.done:
return Icon(
Icons.arrow_forward_ios,
size: 18,
);
break;
case DownloadState.none:
return Icon(
Icons.cloud_download,
size: 22,
);
break;
case DownloadState.loading:
return CircularProgressIndicator();
break;
}
return Container();
}),
),
);
}
}