Skip to content

Commit 8a8885b

Browse files
committed
[Feature] Folder are now visible on top files, created a small tree and added the lessons below
1 parent 9c3a321 commit 8a8885b

File tree

4 files changed

+63
-28
lines changed

4 files changed

+63
-28
lines changed

lib/domain/files_service.dart

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,33 @@ import 'package:googleapis/drive/v2.dart';
55
class FileService {
66
final GDriveRepo _sheetRepo = GDriveRepo();
77

8-
Future<List<FileInformation>> getPossibleLectures() async {
9-
List<File> files = await _sheetRepo.getFiles();
8+
Future<List<LectureFolder>> getPossibleLectures() async {
9+
List<File> filesAndFolders = await _sheetRepo.getFilesAndFolders();
1010

11-
return files
12-
.map((file) => FileInformation(file.title ?? "", file.id ?? ""))
11+
final spreadsheets = filesAndFolders
12+
.where((element) => element.mimeType?.contains("spreadsheet") ?? false)
1313
.toList();
14+
15+
final folders = filesAndFolders
16+
.where((element) => element.mimeType?.contains("folder") ?? false)
17+
.where((element) => element.title != "Flashcard App")
18+
.toList();
19+
20+
List<LectureFolder> t =
21+
folders.map((folder) => LectureFolder(folder.title ?? "", [])).toList();
22+
23+
for (var spreadsheet in spreadsheets) {
24+
final folder = folders.firstWhere(
25+
(element) => element.id == spreadsheet.parents?[0].id,
26+
);
27+
final lectureFolder =
28+
t.firstWhere((element) => element.name == folder.title);
29+
30+
lectureFolder.spreadsheets.add(
31+
LectureInformation(spreadsheet.title ?? "", spreadsheet.id ?? ""),
32+
);
33+
}
34+
35+
return t;
1436
}
1537
}
Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,13 @@
1-
class FileInformation {
1+
class LectureInformation {
22
final String name;
33
final String id;
44

5-
FileInformation(this.name, this.id);
5+
LectureInformation(this.name, this.id);
6+
}
7+
8+
class LectureFolder {
9+
final String name;
10+
final List<LectureInformation> spreadsheets;
11+
12+
LectureFolder(this.name, this.spreadsheets);
613
}

lib/repository/gdrive_repo.dart

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,12 @@ class GDriveRepo {
1010
init = initSheetRepo();
1111
}
1212

13-
Future<List<File>> getFiles() async {
13+
Future<List<File>> getFilesAndFolders() async {
1414
await init;
1515
final result = await driveApi.files.list();
1616
var files = result.items;
1717
if (files == null) throw UnsupportedError("No files found");
18-
return files
19-
.where((element) => element.mimeType?.contains("spreadsheet") ?? false)
20-
.toList();
18+
return files;
2119
}
2220

2321
Future<void> initSheetRepo() async {

lib/ui/screen/lesson_selector_screen.dart

Lines changed: 26 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ class LessonSelectorScreen extends StatefulWidget {
1212

1313
class _LessonSelectorScreenState extends State<LessonSelectorScreen> {
1414
FileService fileService = FileService();
15-
late Future<List<FileInformation>> getPossibleLectures;
15+
late Future<List<LectureFolder>> getPossibleLectures;
1616

1717
@override
1818
void initState() {
@@ -26,26 +26,34 @@ class _LessonSelectorScreenState extends State<LessonSelectorScreen> {
2626
appBar: AppBar(
2727
title: const Text("Select your lesson"),
2828
),
29-
body: FutureBuilder<List<FileInformation>>(
29+
body: FutureBuilder<List<LectureFolder>>(
3030
future: getPossibleLectures,
3131
builder: (context, snapshot) {
3232
if (snapshot.hasData) {
33-
final possibleLecture = snapshot.data;
34-
if (possibleLecture == null) return Container();
35-
return ListView.separated(
36-
itemBuilder: (context, index) {
37-
return ListTile(
38-
title: Text(possibleLecture[index].name),
39-
trailing: const Icon(Icons.keyboard_arrow_right),
40-
onTap: () {
41-
HomePage.navigateTo(context, possibleLecture[index].id);
42-
},
43-
);
44-
},
45-
separatorBuilder: (context, index) {
46-
return const Divider();
47-
},
48-
itemCount: possibleLecture.length,
33+
final possibleLectureFolders = snapshot.data;
34+
if (possibleLectureFolders == null) return Container();
35+
return CustomScrollView(
36+
slivers: [
37+
for (var lectureFolder in possibleLectureFolders) ...[
38+
SliverAppBar(
39+
title: Text(lectureFolder.name),
40+
),
41+
SliverList(
42+
delegate: SliverChildBuilderDelegate((context, index) {
43+
return ListTile(
44+
title: Text(lectureFolder.spreadsheets[index].name),
45+
trailing: const Icon(Icons.keyboard_arrow_right),
46+
onTap: () {
47+
HomePage.navigateTo(
48+
context,
49+
lectureFolder.spreadsheets[index].id,
50+
);
51+
},
52+
);
53+
}, childCount: lectureFolder.spreadsheets.length),
54+
)
55+
]
56+
],
4957
);
5058
}
5159
if (snapshot.hasError) return const Text("Something wrong happend");

0 commit comments

Comments
 (0)