import 'package:flutter/cupertino.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter_cache_manager/flutter_cache_manager.dart'; import 'package:mc_gallery/features/core/services/app_lifecycle_service.dart'; import '/features/core/abstracts/base_view_model.dart'; import '/features/core/services/logging_service.dart'; import '/features/core/services/navigation_service.dart'; import '/features/home/data/models/image_model.dart'; import '/features/home/services/images_service.dart'; import '/features/home/views/image_carousel/image_carousel_view.dart'; import '/locator.dart'; class GalleryViewModel extends BaseViewModel { GalleryViewModel({ required ImagesService imagesService, required NavigationService navigationService, required AppLifecycleService appLifecycleService, required LoggingService loggingService, }) : _imagesService = imagesService, _navigationService = navigationService, _appLifecycleService = appLifecycleService, _loggingService = loggingService; final ImagesService _imagesService; final NavigationService _navigationService; final AppLifecycleService _appLifecycleService; final LoggingService _loggingService; final ValueNotifier _isDisplayingPressingPrompt = ValueNotifier(true); ValueListenable get isDisplayingPressingPrompt => _isDisplayingPressingPrompt; @override Future initialise(bool Function() mounted, [arguments]) async { _appLifecycleService.addListener( tag: runtimeType.toString(), listener: (final appLifecycleState) async { switch (appLifecycleState) { case AppLifecycleState.resumed: break; case AppLifecycleState.inactive: case AppLifecycleState.paused: case AppLifecycleState.detached: await DefaultCacheManager().emptyCache(); } }, ); super.initialise(mounted, arguments); } @override Future dispose() async { await _appLifecycleService.removeListener(tag: runtimeType.toString()); super.dispose(); } void onPromptPressed() => _isDisplayingPressingPrompt.value = false; Iterable get imageModels => _imagesService.imageModels; void pushImageCarouselView(BuildContext context, {required ImageModel imageModel}) => _navigationService.pushImageCarouselView( context, imageCarouselViewArguments: ImageCarouselViewArguments( imageIndexKey: imageModel.imageIndex, ), ); static GalleryViewModel get locate => Locator.locate(); double? downloadProgressValue({required DownloadProgress progress}) => progress.totalSize != null ? progress.downloaded / progress.totalSize! : null; }