listMedia method
Future<MediaPage>
listMedia({
- String? search,
- MediaTypeFilter? type,
- MediaSort sort = MediaSort.dateDesc,
- int limit = 50,
- int offset = 0,
override
List/search media assets with filtering and sorting.
Implementation
@override
Future<MediaPage> listMedia({
String? search,
MediaTypeFilter? type,
MediaSort sort = MediaSort.dateDesc,
int limit = 50,
int offset = 0,
}) async {
var items = _media.values.toList();
// Filter by search
if (search != null && search.isNotEmpty) {
final query = search.toLowerCase();
items = items
.where((a) => a.fileName.toLowerCase().contains(query))
.toList();
}
// Filter by type
if (type != null && type != MediaTypeFilter.all) {
items = items.where((a) {
return switch (type) {
MediaTypeFilter.image => a.mimeType.startsWith('image/'),
MediaTypeFilter.video => a.mimeType.startsWith('video/'),
MediaTypeFilter.file =>
!a.mimeType.startsWith('image/') &&
!a.mimeType.startsWith('video/'),
MediaTypeFilter.all => true,
};
}).toList();
}
// Sort
items.sort((a, b) {
return switch (sort) {
MediaSort.dateDesc => b.createdAt.compareTo(a.createdAt),
MediaSort.dateAsc => a.createdAt.compareTo(b.createdAt),
MediaSort.nameAsc => a.fileName.toLowerCase().compareTo(
b.fileName.toLowerCase(),
),
MediaSort.nameDesc => b.fileName.toLowerCase().compareTo(
a.fileName.toLowerCase(),
),
MediaSort.sizeDesc => b.fileSize.compareTo(a.fileSize),
MediaSort.sizeAsc => a.fileSize.compareTo(b.fileSize),
};
});
final total = items.length;
final paged = items.skip(offset).take(limit).toList();
return MediaPage(items: paged, total: total);
}