collectGallery static method
Future<GalleryMedia?>
collectGallery({
- Locale? locale,
- required GalleryMediaType mediaType,
- bool eagerLoad = true,
Implementation
static Future<GalleryMedia?> collectGallery({
Locale? locale,
required GalleryMediaType mediaType,
bool eagerLoad = true,
}) async {
if (await promptPermissionSetting(mediaType: mediaType)) {
List<GalleryAlbum> tempGalleryAlbums = [];
List<Album> photoAlbums = [];
List<Album> videoAlbums = [];
if (!eagerLoad) {
if (mediaType == GalleryMediaType.image) {
photoAlbums = await PhotoGallery.listAlbums(
mediumType: MediumType.image,
approximateCount: true,
);
}
if (mediaType == GalleryMediaType.video) {
videoAlbums = await PhotoGallery.listAlbums(
mediumType: MediumType.video,
approximateCount: true,
);
}
if (mediaType == GalleryMediaType.all) {
final mixedAlbums = await PhotoGallery.listAlbums(
approximateCount: true,
);
for (final mixedAlbum in mixedAlbums) {
final entry = GalleryAlbum.album(mixedAlbum);
entry.setType = AlbumType.mixed;
tempGalleryAlbums.add(entry);
}
} else if (mediaType == GalleryMediaType.image) {
for (var photoAlbum in photoAlbums) {
GalleryAlbum entry = GalleryAlbum.album(photoAlbum);
entry.setType = AlbumType.image;
tempGalleryAlbums.add(entry);
}
} else {
for (var videoAlbum in videoAlbums) {
GalleryAlbum entry = GalleryAlbum.album(videoAlbum);
entry.setType = AlbumType.video;
tempGalleryAlbums.add(entry);
}
}
return GalleryMedia(tempGalleryAlbums);
}
if (mediaType == GalleryMediaType.image ||
mediaType == GalleryMediaType.all) {
photoAlbums = await PhotoGallery.listAlbums(
mediumType: MediumType.image,
);
if (mediaType == GalleryMediaType.all) {
videoAlbums = await PhotoGallery.listAlbums(
mediumType: MediumType.video,
);
}
for (var photoAlbum in photoAlbums) {
GalleryAlbum entireGalleryAlbum = GalleryAlbum.album(photoAlbum);
await entireGalleryAlbum.initialize(
locale: locale,
onChanged: null,
lightWeight: false,
);
entireGalleryAlbum.setType = AlbumType.image;
if (videoAlbums.any((element) => element.id == photoAlbum.id)) {
Album videoAlbum = videoAlbums.singleWhere(
(element) => element.id == photoAlbum.id,
);
GalleryAlbum videoGalleryAlbum = GalleryAlbum.album(videoAlbum);
await videoGalleryAlbum.initialize(
locale: locale,
onChanged: null,
lightWeight: false,
);
DateTime? lastPhotoDate = entireGalleryAlbum.lastDate;
DateTime? lastVideoDate = videoGalleryAlbum.lastDate;
if (lastPhotoDate == null) {
try {
entireGalleryAlbum.thumbnail = await videoAlbum.getThumbnail(
highQuality: true,
);
} catch (e) {
if (kDebugMode) {
print(e);
}
}
} else if (lastVideoDate == null) {
} else {
if (lastVideoDate.isAfter(lastPhotoDate)) {
try {
entireGalleryAlbum.thumbnail = await videoAlbum.getThumbnail(
highQuality: true,
);
} catch (e) {
entireGalleryAlbum.thumbnail = null;
if (kDebugMode) {
print(e);
}
}
}
}
for (var file in videoGalleryAlbum.files) {
entireGalleryAlbum.addFile(file, locale: locale);
}
entireGalleryAlbum.sort();
entireGalleryAlbum.setType = AlbumType.mixed;
videoAlbums.remove(videoAlbum);
}
tempGalleryAlbums.add(entireGalleryAlbum);
}
}
if (mediaType == GalleryMediaType.video) {
videoAlbums = await PhotoGallery.listAlbums(
mediumType: MediumType.video,
);
}
if (mediaType == GalleryMediaType.video ||
mediaType == GalleryMediaType.all) {
for (var videoAlbum in videoAlbums) {
GalleryAlbum galleryVideoAlbum = GalleryAlbum.album(videoAlbum);
await galleryVideoAlbum.initialize(
locale: locale,
onChanged: null,
lightWeight: false,
);
galleryVideoAlbum.setType = AlbumType.video;
tempGalleryAlbums.add(galleryVideoAlbum);
}
}
return GalleryMedia(tempGalleryAlbums);
} else {
return null;
}
}