update getting album thumbnail service and AlbumThumbnailProvider to show all grey image when album is empty

This commit is contained in:
Wenqi Li 2023-05-03 18:55:29 +08:00
parent f4d3b45070
commit 6a68b22df0
4 changed files with 14 additions and 10 deletions

View File

@ -85,7 +85,7 @@ class PhotoGallery {
} }
/// Get album thumbnail by album id /// Get album thumbnail by album id
static Future<List<int>> getAlbumThumbnail({ static Future<List<int>?> getAlbumThumbnail({
required String albumId, required String albumId,
MediumType? mediumType, MediumType? mediumType,
int? width, int? width,
@ -99,8 +99,7 @@ class PhotoGallery {
'height': height, 'height': height,
'highQuality': highQuality, 'highQuality': highQuality,
}); });
if (bytes == null) throw "Failed to fetch thumbnail of album $albumId"; return bytes != null ? new List<int>.from(bytes) : null;
return new List<int>.from(bytes);
} }
/// get medium file by medium id /// get medium file by medium id

View File

@ -17,7 +17,7 @@ class AlbumThumbnailProvider extends ImageProvider<AlbumThumbnailProvider> {
final bool? highQuality; final bool? highQuality;
@override @override
ImageStreamCompleter load(key, decode) { ImageStreamCompleter loadBuffer(key, decode) {
return MultiFrameImageStreamCompleter( return MultiFrameImageStreamCompleter(
codec: _loadAsync(key, decode), codec: _loadAsync(key, decode),
scale: 1.0, scale: 1.0,
@ -27,17 +27,22 @@ class AlbumThumbnailProvider extends ImageProvider<AlbumThumbnailProvider> {
); );
} }
Future<ui.Codec> _loadAsync( Future<ui.Codec> _loadAsync(AlbumThumbnailProvider key, DecoderBufferCallback decode) async {
AlbumThumbnailProvider key, DecoderCallback decode) async {
assert(key == this); assert(key == this);
final bytes = await PhotoGallery.getAlbumThumbnail( final data = await PhotoGallery.getAlbumThumbnail(
albumId: albumId, albumId: albumId,
mediumType: mediumType, mediumType: mediumType,
height: height, height: height,
width: width, width: width,
highQuality: highQuality, highQuality: highQuality,
); );
return await decode(Uint8List.fromList(bytes)); ui.ImmutableBuffer buffer;
if (data != null) {
buffer = await ui.ImmutableBuffer.fromUint8List(Uint8List.fromList(data));
} else {
buffer = await ui.ImmutableBuffer.fromAsset("packages/photo_gallery/images/grey.bmp");
}
return decode(buffer);
} }
@override @override

View File

@ -46,7 +46,7 @@ class Album {
/// Get thumbnail data for this album. /// Get thumbnail data for this album.
/// ///
/// It will display the lastly taken medium thumbnail. /// It will display the lastly taken medium thumbnail.
Future<List<int>> getThumbnail({ Future<List<int>?> getThumbnail({
int? width, int? width,
int? height, int? height,
bool? highQuality = false, bool? highQuality = false,

View File

@ -70,7 +70,7 @@ void main() {
test('get album thumbnail', () async { test('get album thumbnail', () async {
String albumId = "__ALL__"; String albumId = "__ALL__";
List result = await PhotoGallery.getAlbumThumbnail(albumId: albumId); List? result = await PhotoGallery.getAlbumThumbnail(albumId: albumId);
List expected = Generator.generateMockAlbumThumbnail(albumId: albumId); List expected = Generator.generateMockAlbumThumbnail(albumId: albumId);
expect(result, expected); expect(result, expected);
}); });