mirror of
https://github.com/immich-app/immich
synced 2025-11-07 17:27:20 +00:00
platform thumbhash
This commit is contained in:
parent
84462560e3
commit
c988342de1
15 changed files with 581 additions and 44 deletions
|
|
@ -1,14 +1,13 @@
|
|||
import 'dart:convert' hide Codec;
|
||||
import 'dart:ui';
|
||||
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter/rendering.dart';
|
||||
import 'package:thumbhash/thumbhash.dart';
|
||||
import 'package:immich_mobile/infrastructure/repositories/asset_media.repository.dart';
|
||||
import 'package:immich_mobile/presentation/widgets/images/image_provider.dart';
|
||||
import 'package:immich_mobile/presentation/widgets/images/one_frame_multi_image_stream_completer.dart';
|
||||
|
||||
class ThumbHashProvider extends ImageProvider<ThumbHashProvider> {
|
||||
class ThumbHashProvider extends ImageProvider<ThumbHashProvider> with CancellableImageProviderMixin {
|
||||
final String thumbHash;
|
||||
|
||||
const ThumbHashProvider({required this.thumbHash});
|
||||
ThumbHashProvider({required this.thumbHash});
|
||||
|
||||
@override
|
||||
Future<ThumbHashProvider> obtainKey(ImageConfiguration configuration) {
|
||||
|
|
@ -17,12 +16,21 @@ class ThumbHashProvider extends ImageProvider<ThumbHashProvider> {
|
|||
|
||||
@override
|
||||
ImageStreamCompleter loadImage(ThumbHashProvider key, ImageDecoderCallback decode) {
|
||||
return MultiFrameImageStreamCompleter(codec: _loadCodec(key, decode), scale: 1.0);
|
||||
final completer = OneFramePlaceholderImageStreamCompleter(_loadCodec(key, decode));
|
||||
completer.addOnLastListenerRemovedCallback(cancel);
|
||||
return completer;
|
||||
}
|
||||
|
||||
Future<Codec> _loadCodec(ThumbHashProvider key, ImageDecoderCallback decode) async {
|
||||
final image = thumbHashToRGBA(base64Decode(key.thumbHash));
|
||||
return decode(await ImmutableBuffer.fromUint8List(rgbaToBmp(image)));
|
||||
Stream<ImageInfo> _loadCodec(ThumbHashProvider key, ImageDecoderCallback decode) async* {
|
||||
final request = this.request = ThumbhashImageRequest(thumbhash: thumbHash);
|
||||
try {
|
||||
final image = await request.load(decode);
|
||||
if (image != null) {
|
||||
yield image;
|
||||
}
|
||||
} finally {
|
||||
this.request = null;
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
|
|
|
|||
|
|
@ -1,7 +1,8 @@
|
|||
import 'dart:ui';
|
||||
|
||||
const double kTimelineHeaderExtent = 80.0;
|
||||
const Size kTimelineFixedTileExtent = Size.square(256);
|
||||
const double kTimelineFixedTileExtentPixels = 256;
|
||||
const Size kTimelineFixedTileExtent = Size.square(kTimelineFixedTileExtentPixels);
|
||||
const Size kThumbnailResolution = Size.square(384);
|
||||
const double kTimelineSpacing = 2.0;
|
||||
const int kTimelineColumnCount = 3;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue