fix(mobile): asset description is not shown on the sheet when opened for the first time (#10377)

* fix: invalidate asset's description when asset details changed

* refactor(exif-sheet): use description from exif instead

* refactor(asset-description): remove asset_description.provider

* fix(asset-description): set is empty based on exifInfo.description

* chore: rename service to provider
This commit is contained in:
RanKKI 2024-06-18 03:01:02 +10:00 committed by GitHub
parent 7ce87abc95
commit 29e4666dfa
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 32 additions and 123 deletions

View file

@ -2,10 +2,11 @@ import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:immich_mobile/entities/exif_info.entity.dart';
import 'package:immich_mobile/extensions/build_context_extensions.dart';
import 'package:immich_mobile/providers/asset_viewer/asset_description.provider.dart';
import 'package:immich_mobile/entities/asset.entity.dart';
import 'package:immich_mobile/providers/user.provider.dart';
import 'package:immich_mobile/services/asset_description.service.dart';
import 'package:immich_mobile/widgets/common/immich_toast.dart';
import 'package:logging/logging.dart';
@ -13,9 +14,11 @@ class DescriptionInput extends HookConsumerWidget {
DescriptionInput({
super.key,
required this.asset,
this.exifInfo,
});
final Asset asset;
final ExifInfo? exifInfo;
final Logger _log = Logger('DescriptionInput');
@override
@ -25,25 +28,25 @@ class DescriptionInput extends HookConsumerWidget {
final focusNode = useFocusNode();
final isFocus = useState(false);
final isTextEmpty = useState(controller.text.isEmpty);
final descriptionProvider =
ref.watch(assetDescriptionProvider(asset).notifier);
final description = ref.watch(assetDescriptionProvider(asset));
final descriptionProvider = ref.watch(assetDescriptionServiceProvider);
final owner = ref.watch(currentUserProvider);
final hasError = useState(false);
useEffect(
() {
controller.text = description;
isTextEmpty.value = description.isEmpty;
controller.text = exifInfo?.description ?? '';
isTextEmpty.value = exifInfo?.description?.isEmpty ?? true;
return null;
},
[description],
[exifInfo?.description],
);
submitDescription(String description) async {
hasError.value = false;
try {
await descriptionProvider.setDescription(
asset,
description,
);
} catch (error, stack) {
@ -85,7 +88,7 @@ class DescriptionInput extends HookConsumerWidget {
isFocus.value = false;
focusNode.unfocus();
if (description != controller.text) {
if (exifInfo?.description != controller.text) {
await submitDescription(controller.text);
}
},