mirror of
				https://github.com/KevinMidboe/immich.git
				synced 2025-10-29 17:40:28 +00:00 
			
		
		
		
	fix/cache read write error ios16 (#691)
* Fix(mobile) cache read/write issue, cannot load image on ios16 * Update
This commit is contained in:
		@@ -7,7 +7,6 @@ import 'package:flutter/material.dart';
 | 
			
		||||
import 'package:hive/hive.dart';
 | 
			
		||||
import 'package:immich_mobile/constants/hive_box.dart';
 | 
			
		||||
import 'package:immich_mobile/routing/router.dart';
 | 
			
		||||
import 'package:immich_mobile/shared/services/cache.service.dart';
 | 
			
		||||
import 'package:immich_mobile/utils/image_url_builder.dart';
 | 
			
		||||
import 'package:openapi/api.dart';
 | 
			
		||||
 | 
			
		||||
@@ -15,11 +14,9 @@ class AlbumThumbnailCard extends StatelessWidget {
 | 
			
		||||
  const AlbumThumbnailCard({
 | 
			
		||||
    Key? key,
 | 
			
		||||
    required this.album,
 | 
			
		||||
    required this.cacheService,
 | 
			
		||||
  }) : super(key: key);
 | 
			
		||||
 | 
			
		||||
  final AlbumResponseDto album;
 | 
			
		||||
  final CacheService cacheService;
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Widget build(BuildContext context) {
 | 
			
		||||
@@ -39,7 +36,6 @@ class AlbumThumbnailCard extends StatelessWidget {
 | 
			
		||||
            ClipRRect(
 | 
			
		||||
              borderRadius: BorderRadius.circular(8),
 | 
			
		||||
              child: CachedNetworkImage(
 | 
			
		||||
                cacheManager: cacheService.getCache(CacheType.albumThumbnail),
 | 
			
		||||
                memCacheHeight: max(400, cardSize.toInt() * 3),
 | 
			
		||||
                width: cardSize,
 | 
			
		||||
                height: cardSize,
 | 
			
		||||
 
 | 
			
		||||
@@ -1,15 +1,12 @@
 | 
			
		||||
import 'package:auto_route/auto_route.dart';
 | 
			
		||||
import 'package:cached_network_image/cached_network_image.dart';
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
import 'package:flutter_cache_manager/flutter_cache_manager.dart';
 | 
			
		||||
import 'package:flutter_hooks/flutter_hooks.dart';
 | 
			
		||||
import 'package:hive_flutter/hive_flutter.dart';
 | 
			
		||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
 | 
			
		||||
import 'package:immich_mobile/constants/hive_box.dart';
 | 
			
		||||
import 'package:immich_mobile/modules/login/providers/authentication.provider.dart';
 | 
			
		||||
import 'package:immich_mobile/modules/album/providers/asset_selection.provider.dart';
 | 
			
		||||
import 'package:immich_mobile/routing/router.dart';
 | 
			
		||||
import 'package:immich_mobile/shared/services/cache.service.dart';
 | 
			
		||||
import 'package:immich_mobile/utils/image_url_builder.dart';
 | 
			
		||||
import 'package:openapi/api.dart';
 | 
			
		||||
 | 
			
		||||
@@ -17,13 +14,11 @@ class AlbumViewerThumbnail extends HookConsumerWidget {
 | 
			
		||||
  final AssetResponseDto asset;
 | 
			
		||||
  final List<AssetResponseDto> assetList;
 | 
			
		||||
  final bool showStorageIndicator;
 | 
			
		||||
  final BaseCacheManager? cacheManager;
 | 
			
		||||
 | 
			
		||||
  const AlbumViewerThumbnail({
 | 
			
		||||
    Key? key,
 | 
			
		||||
    required this.asset,
 | 
			
		||||
    required this.assetList,
 | 
			
		||||
    this.cacheManager,
 | 
			
		||||
    this.showStorageIndicator = true,
 | 
			
		||||
  }) : super(key: key);
 | 
			
		||||
 | 
			
		||||
@@ -126,7 +121,6 @@ class AlbumViewerThumbnail extends HookConsumerWidget {
 | 
			
		||||
      return Container(
 | 
			
		||||
        decoration: BoxDecoration(border: drawBorderColor()),
 | 
			
		||||
        child: CachedNetworkImage(
 | 
			
		||||
          cacheManager: cacheManager,
 | 
			
		||||
          cacheKey: asset.id,
 | 
			
		||||
          width: 300,
 | 
			
		||||
          height: 300,
 | 
			
		||||
 
 | 
			
		||||
@@ -1,11 +1,9 @@
 | 
			
		||||
import 'package:cached_network_image/cached_network_image.dart';
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
import 'package:flutter_hooks/flutter_hooks.dart';
 | 
			
		||||
import 'package:hive_flutter/hive_flutter.dart';
 | 
			
		||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
 | 
			
		||||
import 'package:immich_mobile/constants/hive_box.dart';
 | 
			
		||||
import 'package:immich_mobile/modules/album/providers/asset_selection.provider.dart';
 | 
			
		||||
import 'package:immich_mobile/shared/services/cache.service.dart';
 | 
			
		||||
import 'package:immich_mobile/utils/image_url_builder.dart';
 | 
			
		||||
import 'package:openapi/api.dart';
 | 
			
		||||
 | 
			
		||||
@@ -24,7 +22,6 @@ class SelectionThumbnailImage extends HookConsumerWidget {
 | 
			
		||||
    var newAssetsForAlbum =
 | 
			
		||||
        ref.watch(assetSelectionProvider).selectedAdditionalAssetsForAlbum;
 | 
			
		||||
    var isAlbumExist = ref.watch(assetSelectionProvider).isAlbumExist;
 | 
			
		||||
    final cacheService = ref.watch(cacheServiceProvider);
 | 
			
		||||
 | 
			
		||||
    Widget _buildSelectionIcon(AssetResponseDto asset) {
 | 
			
		||||
      var isSelected = selectedAsset.map((item) => item.id).contains(asset.id);
 | 
			
		||||
@@ -114,7 +111,6 @@ class SelectionThumbnailImage extends HookConsumerWidget {
 | 
			
		||||
          Container(
 | 
			
		||||
            decoration: BoxDecoration(border: drawBorderColor()),
 | 
			
		||||
            child: CachedNetworkImage(
 | 
			
		||||
              cacheManager: cacheService.getCache(CacheType.thumbnail),
 | 
			
		||||
              cacheKey: asset.id,
 | 
			
		||||
              width: 150,
 | 
			
		||||
              height: 150,
 | 
			
		||||
 
 | 
			
		||||
@@ -1,10 +1,8 @@
 | 
			
		||||
import 'package:cached_network_image/cached_network_image.dart';
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
import 'package:flutter_hooks/flutter_hooks.dart';
 | 
			
		||||
import 'package:hive_flutter/hive_flutter.dart';
 | 
			
		||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
 | 
			
		||||
import 'package:immich_mobile/constants/hive_box.dart';
 | 
			
		||||
import 'package:immich_mobile/shared/services/cache.service.dart';
 | 
			
		||||
import 'package:immich_mobile/utils/image_url_builder.dart';
 | 
			
		||||
import 'package:openapi/api.dart';
 | 
			
		||||
 | 
			
		||||
@@ -16,7 +14,6 @@ class SharedAlbumThumbnailImage extends HookConsumerWidget {
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  Widget build(BuildContext context, WidgetRef ref) {
 | 
			
		||||
    final cacheService = ref.watch(cacheServiceProvider);
 | 
			
		||||
    var box = Hive.box(userInfoBox);
 | 
			
		||||
 | 
			
		||||
    return GestureDetector(
 | 
			
		||||
@@ -26,7 +23,6 @@ class SharedAlbumThumbnailImage extends HookConsumerWidget {
 | 
			
		||||
      child: Stack(
 | 
			
		||||
        children: [
 | 
			
		||||
          CachedNetworkImage(
 | 
			
		||||
            cacheManager: cacheService.getCache(CacheType.thumbnail),
 | 
			
		||||
            cacheKey: asset.id,
 | 
			
		||||
            width: 500,
 | 
			
		||||
            height: 500,
 | 
			
		||||
 
 | 
			
		||||
@@ -16,7 +16,6 @@ import 'package:immich_mobile/modules/album/ui/album_viewer_thumbnail.dart';
 | 
			
		||||
import 'package:immich_mobile/modules/settings/providers/app_settings.provider.dart';
 | 
			
		||||
import 'package:immich_mobile/modules/settings/services/app_settings.service.dart';
 | 
			
		||||
import 'package:immich_mobile/routing/router.dart';
 | 
			
		||||
import 'package:immich_mobile/shared/services/cache.service.dart';
 | 
			
		||||
import 'package:immich_mobile/shared/ui/immich_loading_indicator.dart';
 | 
			
		||||
import 'package:immich_mobile/shared/ui/immich_sliver_persistent_app_bar_delegate.dart';
 | 
			
		||||
import 'package:immich_mobile/shared/views/immich_loading_overlay.dart';
 | 
			
		||||
@@ -192,7 +191,6 @@ class AlbumViewerPage extends HookConsumerWidget {
 | 
			
		||||
      final appSettingService = ref.watch(appSettingsServiceProvider);
 | 
			
		||||
      final bool showStorageIndicator =
 | 
			
		||||
          appSettingService.getSetting(AppSettingsEnum.storageIndicator);
 | 
			
		||||
      final cacheService = ref.watch(cacheServiceProvider);
 | 
			
		||||
 | 
			
		||||
      if (albumInfo.assets.isNotEmpty) {
 | 
			
		||||
        return SliverPadding(
 | 
			
		||||
@@ -207,7 +205,6 @@ class AlbumViewerPage extends HookConsumerWidget {
 | 
			
		||||
            delegate: SliverChildBuilderDelegate(
 | 
			
		||||
              (BuildContext context, int index) {
 | 
			
		||||
                return AlbumViewerThumbnail(
 | 
			
		||||
                  cacheManager: cacheService.getCache(CacheType.thumbnail),
 | 
			
		||||
                  asset: albumInfo.assets[index],
 | 
			
		||||
                  assetList: albumInfo.assets,
 | 
			
		||||
                  showStorageIndicator: showStorageIndicator,
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,6 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
 | 
			
		||||
import 'package:immich_mobile/modules/album/providers/album.provider.dart';
 | 
			
		||||
import 'package:immich_mobile/modules/album/ui/album_thumbnail_card.dart';
 | 
			
		||||
import 'package:immich_mobile/routing/router.dart';
 | 
			
		||||
import 'package:immich_mobile/shared/services/cache.service.dart';
 | 
			
		||||
 | 
			
		||||
class LibraryPage extends HookConsumerWidget {
 | 
			
		||||
  const LibraryPage({Key? key}) : super(key: key);
 | 
			
		||||
@@ -14,7 +13,6 @@ class LibraryPage extends HookConsumerWidget {
 | 
			
		||||
  @override
 | 
			
		||||
  Widget build(BuildContext context, WidgetRef ref) {
 | 
			
		||||
    final albums = ref.watch(albumProvider);
 | 
			
		||||
    final cacheService = ref.watch(cacheServiceProvider);
 | 
			
		||||
 | 
			
		||||
    useEffect(
 | 
			
		||||
      () {
 | 
			
		||||
@@ -104,7 +102,6 @@ class LibraryPage extends HookConsumerWidget {
 | 
			
		||||
                  _buildCreateAlbumButton(),
 | 
			
		||||
                  for (var album in albums)
 | 
			
		||||
                    AlbumThumbnailCard(
 | 
			
		||||
                      cacheService: cacheService,
 | 
			
		||||
                      album: album,
 | 
			
		||||
                    ),
 | 
			
		||||
                ],
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,6 @@ import 'package:immich_mobile/constants/hive_box.dart';
 | 
			
		||||
import 'package:immich_mobile/modules/album/providers/shared_album.provider.dart';
 | 
			
		||||
import 'package:immich_mobile/modules/album/ui/sharing_sliver_appbar.dart';
 | 
			
		||||
import 'package:immich_mobile/routing/router.dart';
 | 
			
		||||
import 'package:immich_mobile/shared/services/cache.service.dart';
 | 
			
		||||
import 'package:immich_mobile/utils/image_url_builder.dart';
 | 
			
		||||
import 'package:openapi/api.dart';
 | 
			
		||||
 | 
			
		||||
@@ -21,7 +20,6 @@ class SharingPage extends HookConsumerWidget {
 | 
			
		||||
    var box = Hive.box(userInfoBox);
 | 
			
		||||
    var thumbnailRequestUrl = '${box.get(serverEndpointKey)}/asset/thumbnail';
 | 
			
		||||
    final List<AlbumResponseDto> sharedAlbums = ref.watch(sharedAlbumProvider);
 | 
			
		||||
    final CacheService cacheService = ref.watch(cacheServiceProvider);
 | 
			
		||||
 | 
			
		||||
    useEffect(
 | 
			
		||||
      () {
 | 
			
		||||
@@ -47,8 +45,6 @@ class SharingPage extends HookConsumerWidget {
 | 
			
		||||
                  height: 60,
 | 
			
		||||
                  memCacheHeight: 200,
 | 
			
		||||
                  fit: BoxFit.cover,
 | 
			
		||||
                  cacheManager:
 | 
			
		||||
                      cacheService.getCache(CacheType.sharedAlbumThumbnail),
 | 
			
		||||
                  imageUrl: getAlbumThumbnailUrl(album),
 | 
			
		||||
                  cacheKey: album.albumThumbnailAssetId,
 | 
			
		||||
                  httpHeaders: {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,7 +1,6 @@
 | 
			
		||||
import 'package:cached_network_image/cached_network_image.dart';
 | 
			
		||||
import 'package:flutter/cupertino.dart';
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
import 'package:flutter_cache_manager/flutter_cache_manager.dart';
 | 
			
		||||
import 'package:photo_view/photo_view.dart';
 | 
			
		||||
 | 
			
		||||
enum _RemoteImageStatus { empty, thumbnail, preview, full }
 | 
			
		||||
@@ -70,13 +69,11 @@ class _RemotePhotoViewState extends State<RemotePhotoView> {
 | 
			
		||||
  CachedNetworkImageProvider _authorizedImageProvider(
 | 
			
		||||
    String url,
 | 
			
		||||
    String cacheKey,
 | 
			
		||||
    BaseCacheManager? cacheManager,
 | 
			
		||||
  ) {
 | 
			
		||||
    return CachedNetworkImageProvider(
 | 
			
		||||
      url,
 | 
			
		||||
      headers: {"Authorization": widget.authToken},
 | 
			
		||||
      cacheKey: cacheKey,
 | 
			
		||||
      cacheManager: cacheManager,
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@@ -113,7 +110,6 @@ class _RemotePhotoViewState extends State<RemotePhotoView> {
 | 
			
		||||
    thumbnailProvider = _authorizedImageProvider(
 | 
			
		||||
      widget.thumbnailUrl,
 | 
			
		||||
      widget.cacheKey,
 | 
			
		||||
      widget.thumbnailCacheManager,
 | 
			
		||||
    );
 | 
			
		||||
    _imageProvider = thumbnailProvider;
 | 
			
		||||
 | 
			
		||||
@@ -130,7 +126,6 @@ class _RemotePhotoViewState extends State<RemotePhotoView> {
 | 
			
		||||
      previewProvider = _authorizedImageProvider(
 | 
			
		||||
        widget.previewUrl!,
 | 
			
		||||
        "${widget.cacheKey}_previewStage",
 | 
			
		||||
        widget.previewCacheManager,
 | 
			
		||||
      );
 | 
			
		||||
      previewProvider.resolve(const ImageConfiguration()).addListener(
 | 
			
		||||
        ImageStreamListener((ImageInfo imageInfo, _) {
 | 
			
		||||
@@ -142,7 +137,6 @@ class _RemotePhotoViewState extends State<RemotePhotoView> {
 | 
			
		||||
    fullProvider = _authorizedImageProvider(
 | 
			
		||||
      widget.imageUrl,
 | 
			
		||||
      "${widget.cacheKey}_fullStage",
 | 
			
		||||
      widget.fullCacheManager,
 | 
			
		||||
    );
 | 
			
		||||
    fullProvider.resolve(const ImageConfiguration()).addListener(
 | 
			
		||||
      ImageStreamListener((ImageInfo imageInfo, _) {
 | 
			
		||||
@@ -184,9 +178,6 @@ class RemotePhotoView extends StatefulWidget {
 | 
			
		||||
    this.previewUrl,
 | 
			
		||||
    required this.onLoadingCompleted,
 | 
			
		||||
    required this.onLoadingStart,
 | 
			
		||||
    this.thumbnailCacheManager,
 | 
			
		||||
    this.previewCacheManager,
 | 
			
		||||
    this.fullCacheManager,
 | 
			
		||||
    required this.cacheKey,
 | 
			
		||||
  }) : super(key: key);
 | 
			
		||||
 | 
			
		||||
@@ -196,9 +187,6 @@ class RemotePhotoView extends StatefulWidget {
 | 
			
		||||
  final String? previewUrl;
 | 
			
		||||
  final Function onLoadingCompleted;
 | 
			
		||||
  final Function onLoadingStart;
 | 
			
		||||
  final BaseCacheManager? thumbnailCacheManager;
 | 
			
		||||
  final BaseCacheManager? previewCacheManager;
 | 
			
		||||
  final BaseCacheManager? fullCacheManager;
 | 
			
		||||
  final String cacheKey;
 | 
			
		||||
 | 
			
		||||
  final void Function() onSwipeDown;
 | 
			
		||||
 
 | 
			
		||||
@@ -8,7 +8,6 @@ import 'package:immich_mobile/modules/asset_viewer/ui/download_loading_indicator
 | 
			
		||||
import 'package:immich_mobile/modules/asset_viewer/ui/exif_bottom_sheet.dart';
 | 
			
		||||
import 'package:immich_mobile/modules/asset_viewer/ui/remote_photo_view.dart';
 | 
			
		||||
import 'package:immich_mobile/modules/home/services/asset.service.dart';
 | 
			
		||||
import 'package:immich_mobile/shared/services/cache.service.dart';
 | 
			
		||||
import 'package:immich_mobile/utils/image_url_builder.dart';
 | 
			
		||||
import 'package:openapi/api.dart';
 | 
			
		||||
 | 
			
		||||
@@ -41,7 +40,6 @@ class ImageViewerPage extends HookConsumerWidget {
 | 
			
		||||
  Widget build(BuildContext context, WidgetRef ref) {
 | 
			
		||||
    final downloadAssetStatus =
 | 
			
		||||
        ref.watch(imageViewerStateProvider).downloadAssetStatus;
 | 
			
		||||
    final cacheService = ref.watch(cacheServiceProvider);
 | 
			
		||||
 | 
			
		||||
    getAssetExif() async {
 | 
			
		||||
      assetDetail =
 | 
			
		||||
@@ -87,12 +85,6 @@ class ImageViewerPage extends HookConsumerWidget {
 | 
			
		||||
              onSwipeUp: () => showInfo(),
 | 
			
		||||
              onLoadingCompleted: onLoadingCompleted,
 | 
			
		||||
              onLoadingStart: onLoadingStart,
 | 
			
		||||
              thumbnailCacheManager:
 | 
			
		||||
                  cacheService.getCache(CacheType.thumbnail),
 | 
			
		||||
              previewCacheManager:
 | 
			
		||||
                  cacheService.getCache(CacheType.imageViewerPreview),
 | 
			
		||||
              fullCacheManager:
 | 
			
		||||
                  cacheService.getCache(CacheType.imageViewerFull),
 | 
			
		||||
            ),
 | 
			
		||||
          ),
 | 
			
		||||
        ),
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,4 @@
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
import 'package:flutter_cache_manager/flutter_cache_manager.dart';
 | 
			
		||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
 | 
			
		||||
import 'package:immich_mobile/modules/home/ui/thumbnail_image.dart';
 | 
			
		||||
import 'package:openapi/api.dart';
 | 
			
		||||
@@ -10,13 +9,11 @@ class ImageGrid extends ConsumerWidget {
 | 
			
		||||
  final List<AssetResponseDto> sortedAssetGroup;
 | 
			
		||||
  final int tilesPerRow;
 | 
			
		||||
  final bool showStorageIndicator;
 | 
			
		||||
  final BaseCacheManager? cacheManager;
 | 
			
		||||
 | 
			
		||||
  ImageGrid({
 | 
			
		||||
    Key? key,
 | 
			
		||||
    required this.assetGroup,
 | 
			
		||||
    required this.sortedAssetGroup,
 | 
			
		||||
    this.cacheManager,
 | 
			
		||||
    this.tilesPerRow = 4,
 | 
			
		||||
    this.showStorageIndicator = true,
 | 
			
		||||
  }) : super(key: key);
 | 
			
		||||
@@ -39,7 +36,6 @@ class ImageGrid extends ConsumerWidget {
 | 
			
		||||
            child: Stack(
 | 
			
		||||
              children: [
 | 
			
		||||
                ThumbnailImage(
 | 
			
		||||
                  cacheManager: cacheManager,
 | 
			
		||||
                  asset: assetGroup[index],
 | 
			
		||||
                  assetList: sortedAssetGroup,
 | 
			
		||||
                  showStorageIndicator: showStorageIndicator,
 | 
			
		||||
 
 | 
			
		||||
@@ -2,8 +2,6 @@ import 'package:auto_route/auto_route.dart';
 | 
			
		||||
import 'package:cached_network_image/cached_network_image.dart';
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
import 'package:flutter/services.dart';
 | 
			
		||||
import 'package:flutter_cache_manager/flutter_cache_manager.dart';
 | 
			
		||||
import 'package:flutter_hooks/flutter_hooks.dart';
 | 
			
		||||
import 'package:hive_flutter/hive_flutter.dart';
 | 
			
		||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
 | 
			
		||||
import 'package:immich_mobile/constants/hive_box.dart';
 | 
			
		||||
@@ -17,13 +15,11 @@ class ThumbnailImage extends HookConsumerWidget {
 | 
			
		||||
  final AssetResponseDto asset;
 | 
			
		||||
  final List<AssetResponseDto> assetList;
 | 
			
		||||
  final bool showStorageIndicator;
 | 
			
		||||
  final BaseCacheManager? cacheManager;
 | 
			
		||||
 | 
			
		||||
  const ThumbnailImage({
 | 
			
		||||
    Key? key,
 | 
			
		||||
    required this.asset,
 | 
			
		||||
    required this.assetList,
 | 
			
		||||
    this.cacheManager,
 | 
			
		||||
    this.showStorageIndicator = true,
 | 
			
		||||
  }) : super(key: key);
 | 
			
		||||
 | 
			
		||||
@@ -96,7 +92,6 @@ class ThumbnailImage extends HookConsumerWidget {
 | 
			
		||||
              ),
 | 
			
		||||
              child: CachedNetworkImage(
 | 
			
		||||
                cacheKey: asset.id,
 | 
			
		||||
                cacheManager: cacheManager,
 | 
			
		||||
                width: 300,
 | 
			
		||||
                height: 300,
 | 
			
		||||
                memCacheHeight: asset.type == AssetTypeEnum.IMAGE ? 250 : 400,
 | 
			
		||||
@@ -114,7 +109,7 @@ class ThumbnailImage extends HookConsumerWidget {
 | 
			
		||||
                  ),
 | 
			
		||||
                ),
 | 
			
		||||
                errorWidget: (context, url, error) {
 | 
			
		||||
                  debugPrint("Error getting thumbnail $url = $error");
 | 
			
		||||
                  // debugPrint("Error getting thumbnail $url = $error");
 | 
			
		||||
                  return Icon(
 | 
			
		||||
                    Icons.image_not_supported_outlined,
 | 
			
		||||
                    color: Theme.of(context).primaryColor,
 | 
			
		||||
 
 | 
			
		||||
@@ -16,7 +16,6 @@ import 'package:immich_mobile/modules/settings/services/app_settings.service.dar
 | 
			
		||||
import 'package:immich_mobile/shared/providers/asset.provider.dart';
 | 
			
		||||
import 'package:immich_mobile/shared/providers/server_info.provider.dart';
 | 
			
		||||
import 'package:immich_mobile/shared/providers/websocket.provider.dart';
 | 
			
		||||
import 'package:immich_mobile/shared/services/cache.service.dart';
 | 
			
		||||
import 'package:openapi/api.dart';
 | 
			
		||||
 | 
			
		||||
class HomePage extends HookConsumerWidget {
 | 
			
		||||
@@ -25,7 +24,6 @@ class HomePage extends HookConsumerWidget {
 | 
			
		||||
  @override
 | 
			
		||||
  Widget build(BuildContext context, WidgetRef ref) {
 | 
			
		||||
    final appSettingService = ref.watch(appSettingsServiceProvider);
 | 
			
		||||
    final cacheService = ref.watch(cacheServiceProvider);
 | 
			
		||||
 | 
			
		||||
    ScrollController scrollController = useScrollController();
 | 
			
		||||
    var assetGroupByDateTime = ref.watch(assetGroupByDateTimeProvider);
 | 
			
		||||
@@ -91,7 +89,6 @@ class HomePage extends HookConsumerWidget {
 | 
			
		||||
 | 
			
		||||
            imageGridGroup.add(
 | 
			
		||||
              ImageGrid(
 | 
			
		||||
                cacheManager: cacheService.getCache(CacheType.thumbnail),
 | 
			
		||||
                assetGroup: immichAssetList,
 | 
			
		||||
                sortedAssetGroup: sortedAssetList,
 | 
			
		||||
                tilesPerRow:
 | 
			
		||||
 
 | 
			
		||||
@@ -15,7 +15,6 @@ class CacheSettings extends HookConsumerWidget {
 | 
			
		||||
  @override
 | 
			
		||||
  Widget build(BuildContext context, WidgetRef ref) {
 | 
			
		||||
    final CacheService cacheService = ref.watch(cacheServiceProvider);
 | 
			
		||||
 | 
			
		||||
    final clearCacheState = useState(false);
 | 
			
		||||
 | 
			
		||||
    Future<void> clearCache() async {
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,6 @@ import 'package:easy_localization/easy_localization.dart';
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
 | 
			
		||||
import 'package:immich_mobile/modules/settings/ui/asset_list_settings/asset_list_settings.dart';
 | 
			
		||||
import 'package:immich_mobile/modules/settings/ui/cache_settings/cache_settings.dart';
 | 
			
		||||
import 'package:immich_mobile/modules/settings/ui/image_viewer_quality_setting/image_viewer_quality_setting.dart';
 | 
			
		||||
import 'package:immich_mobile/modules/settings/ui/notification_setting/notification_setting.dart';
 | 
			
		||||
import 'package:immich_mobile/modules/settings/ui/theme_setting/theme_setting.dart';
 | 
			
		||||
@@ -42,7 +41,6 @@ class SettingsPage extends HookConsumerWidget {
 | 
			
		||||
              const ImageViewerQualitySetting(),
 | 
			
		||||
              const ThemeSetting(),
 | 
			
		||||
              const AssetListSettings(),
 | 
			
		||||
              const CacheSettings(),
 | 
			
		||||
              if (Platform.isAndroid) const NotificationSetting(),
 | 
			
		||||
            ],
 | 
			
		||||
          ).toList(),
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user