Skip to content

Commit c705ce2

Browse files
committed
Refactor files list
1 parent 1b4e696 commit c705ce2

1 file changed

Lines changed: 98 additions & 116 deletions

File tree

lib/pages/files/files.dart

Lines changed: 98 additions & 116 deletions
Original file line numberDiff line numberDiff line change
@@ -93,122 +93,11 @@ class _FilesPagePageState extends State<FilesPage>
9393
onRefresh: () async =>
9494
refresh(context, stateL: stateL, state: state),
9595
child: state.folderState == FolderState.home
96-
? SafeArea(
97-
child: CustomScrollView(
98-
slivers: state.courses
99-
.groupBy(
100-
(c) => c
101-
.relationship('start-semester')
102-
.first
103-
.id,
104-
)
105-
.map(
106-
(s, cs) => MapEntry(
107-
state.semesters.firstWhere(
108-
(se) => se.id == s,
109-
),
110-
cs,
111-
),
112-
)
113-
.entries
114-
.sortedBy((e) => e.key.attributes.start)
115-
.reversed
116-
.map(
117-
(e) => SliverStickyHeader(
118-
header: Container(
119-
height: 60,
120-
color: Colors.lightBlue,
121-
padding: const EdgeInsets.symmetric(
122-
horizontal: 16,
123-
),
124-
alignment: Alignment.centerLeft,
125-
child: Text(
126-
e.key.attributes.title,
127-
style: const TextStyle(
128-
color: Colors.white,
129-
),
130-
),
131-
),
132-
sliver: SliverList(
133-
delegate: SliverChildListDelegate.fixed(
134-
e.value
135-
.map(
136-
(c) => CourseWidget(
137-
course: c,
138-
onTap: () async {
139-
await loadCourse(c);
140-
},
141-
),
142-
)
143-
.sortedByCompare(
144-
(f) => f.sortKey,
145-
compareNatural,
146-
)
147-
.toList(growable: false),
148-
),
149-
),
150-
),
151-
)
152-
.toList(growable: false),
153-
),
154-
)
155-
: ListView(
156-
children:
157-
<Widget>[
158-
FolderWidget(
159-
folder: goUpFolder(),
160-
onTap: () async {
161-
state.goUp();
162-
await refresh(
163-
context,
164-
stateL: stateL,
165-
state: state,
166-
);
167-
},
168-
),
169-
] +
170-
state.folders
171-
.map(
172-
(f) => FolderWidget(
173-
folder: f,
174-
onTap: () async {
175-
await loadFolder(f);
176-
},
177-
),
178-
)
179-
.sortedByCompare(
180-
(f) => f.sortKey,
181-
compareNatural,
182-
)
183-
.toList(growable: false) +
184-
state.files
185-
.map(
186-
(f) => FileWidget(
187-
file: f,
188-
onTap: () async {
189-
final pd = ProgressDialog(
190-
context: context,
191-
);
192-
unawaited(
193-
pd.show(
194-
msg: context.i18n.downloading,
195-
),
196-
);
197-
await downloadFile(
198-
f,
199-
onProgress: (perc) =>
200-
pd.update(value: perc.round()),
201-
onDone: OpenFilex.open,
202-
);
203-
},
204-
showDownloads: isWideScreen,
205-
),
206-
)
207-
.sortedByCompare(
208-
(f) => f.sortKey,
209-
compareNatural,
210-
)
211-
.toList(growable: false),
96+
? generateHomeList(context, state: state)
97+
: generateFolderList(
98+
context,
99+
stateL: stateL,
100+
state: state,
212101
),
213102
),
214103
);
@@ -217,6 +106,99 @@ class _FilesPagePageState extends State<FilesPage>
217106
),
218107
);
219108

109+
Widget generateHomeList(BuildContext context, {required FilesState state}) =>
110+
SafeArea(
111+
child: CustomScrollView(
112+
slivers: state.courses
113+
.groupBy((c) => c.relationship('start-semester').first.id)
114+
.map(
115+
(s, cs) => MapEntry(
116+
state.semesters.firstWhere((se) => se.id == s),
117+
cs,
118+
),
119+
)
120+
.entries
121+
.sortedBy((e) => e.key.attributes.start)
122+
.reversed
123+
.map(
124+
(e) => SliverStickyHeader(
125+
header: Container(
126+
height: 60,
127+
color: Colors.lightBlue,
128+
padding: const EdgeInsets.symmetric(horizontal: 16),
129+
alignment: Alignment.centerLeft,
130+
child: Text(
131+
e.key.attributes.title,
132+
style: const TextStyle(color: Colors.white),
133+
),
134+
),
135+
sliver: SliverList(
136+
delegate: SliverChildListDelegate.fixed(
137+
e.value
138+
.map(
139+
(c) => CourseWidget(
140+
course: c,
141+
onTap: () async {
142+
await loadCourse(c);
143+
},
144+
),
145+
)
146+
.sortedByCompare((f) => f.sortKey, compareNatural)
147+
.toList(growable: false),
148+
),
149+
),
150+
),
151+
)
152+
.toList(growable: false),
153+
),
154+
);
155+
156+
Widget generateFolderList(
157+
BuildContext context, {
158+
required LoginState stateL,
159+
required FilesState state,
160+
}) => ListView(
161+
children:
162+
<Widget>[
163+
FolderWidget(
164+
folder: goUpFolder(),
165+
onTap: () async {
166+
state.goUp();
167+
await refresh(context, stateL: stateL, state: state);
168+
},
169+
),
170+
] +
171+
state.folders
172+
.map(
173+
(f) => FolderWidget(
174+
folder: f,
175+
onTap: () async {
176+
await loadFolder(f);
177+
},
178+
),
179+
)
180+
.sortedByCompare((f) => f.sortKey, compareNatural)
181+
.toList(growable: false) +
182+
state.files
183+
.map(
184+
(f) => FileWidget(
185+
file: f,
186+
onTap: () async {
187+
final pd = ProgressDialog(context: context);
188+
unawaited(pd.show(msg: context.i18n.downloading));
189+
await downloadFile(
190+
f,
191+
onProgress: (perc) => pd.update(value: perc.round()),
192+
onDone: OpenFilex.open,
193+
);
194+
},
195+
showDownloads: isWideScreen,
196+
),
197+
)
198+
.sortedByCompare((f) => f.sortKey, compareNatural)
199+
.toList(growable: false),
200+
);
201+
220202
Future<String> downloadFile(
221203
FileRef file, {
222204
ProgressListener? onProgress,

0 commit comments

Comments
 (0)