shared_album_thumbnail_image.dart 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. import 'package:cached_network_image/cached_network_image.dart';
  2. import 'package:flutter/material.dart';
  3. import 'package:flutter_hooks/flutter_hooks.dart';
  4. import 'package:hive_flutter/hive_flutter.dart';
  5. import 'package:hooks_riverpod/hooks_riverpod.dart';
  6. import 'package:immich_mobile/constants/hive_box.dart';
  7. import 'package:openapi/api.dart';
  8. class SharedAlbumThumbnailImage extends HookConsumerWidget {
  9. final AssetResponseDto asset;
  10. const SharedAlbumThumbnailImage({Key? key, required this.asset})
  11. : super(key: key);
  12. @override
  13. Widget build(BuildContext context, WidgetRef ref) {
  14. final cacheKey = useState(1);
  15. var box = Hive.box(userInfoBox);
  16. var thumbnailRequestUrl =
  17. '${box.get(serverEndpointKey)}/asset/thumbnail/${asset.id}';
  18. return GestureDetector(
  19. onTap: () {
  20. // debugPrint("View ${asset.id}");
  21. },
  22. child: Stack(
  23. children: [
  24. CachedNetworkImage(
  25. cacheKey: "${asset.id}-${cacheKey.value}",
  26. width: 500,
  27. height: 500,
  28. memCacheHeight: 500,
  29. fit: BoxFit.cover,
  30. imageUrl: thumbnailRequestUrl,
  31. httpHeaders: {"Authorization": "Bearer ${box.get(accessTokenKey)}"},
  32. fadeInDuration: const Duration(milliseconds: 250),
  33. progressIndicatorBuilder: (context, url, downloadProgress) =>
  34. Transform.scale(
  35. scale: 0.2,
  36. child:
  37. CircularProgressIndicator(value: downloadProgress.progress),
  38. ),
  39. errorWidget: (context, url, error) {
  40. return Icon(
  41. Icons.image_not_supported_outlined,
  42. color: Theme.of(context).primaryColor,
  43. );
  44. },
  45. ),
  46. ],
  47. ),
  48. );
  49. }
  50. }