#597 fixed multi-page context update when removing burst entries in viewer

This commit is contained in:
Thibault Deckers 2023-04-19 14:55:58 +02:00
parent 88b1041286
commit 9df2ea5d02
3 changed files with 32 additions and 7 deletions

View file

@ -8,6 +8,10 @@ All notable changes to this project will be documented in this file.
- Collection: support for Sony predictive capture as burst
### Fixed
- Viewer: multi-page context update when removing burst entries
## <a id="v1.8.5"></a>[v1.8.5] - 2023-04-18
### Added

View file

@ -697,7 +697,20 @@ class _EntryViewerStackState extends State<EntryViewerStack> with EntryViewContr
if (hasCollection) {
final collectionEntries = collection!.sortedEntries;
removedEntries.forEach(collectionEntries.remove);
removedEntries.forEach((removedEntry) {
// remove from collection
if (collectionEntries.remove(removedEntry)) return;
// remove from burst
final mainEntry = collectionEntries.firstWhereOrNull((entry) => entry.burstEntries?.contains(removedEntry) == true);
if (mainEntry != null) {
final multiPageController = context.read<MultiPageConductor>().getController(mainEntry);
if (multiPageController != null) {
mainEntry.burstEntries!.remove(removedEntry);
multiPageController.reset();
}
}
});
if (collectionEntries.isNotEmpty) {
_onCollectionChanged();
return;

View file

@ -1,4 +1,5 @@
import 'dart:async';
import 'dart:math';
import 'package:aves/model/entry/entry.dart';
import 'package:aves/model/entry/extensions/multipage.dart';
@ -23,14 +24,21 @@ class MultiPageController {
set page(int? page) => pageNotifier.value = page;
MultiPageController(this.entry) {
entry.getMultiPageInfo().then((value) {
if (value == null || _disposed) return;
pageNotifier.value = value.defaultPage?.index ?? 0;
_info = value;
_infoStreamController.add(_info);
});
reset();
}
void reset() => entry.getMultiPageInfo().then((info) {
if (info == null || _disposed) return;
final currentPage = pageNotifier.value;
if (currentPage == null) {
pageNotifier.value = info.defaultPage?.index ?? 0;
} else {
pageNotifier.value = min(currentPage, info.pageCount - 1);
}
_info = info;
_infoStreamController.add(_info);
});
void dispose() {
_disposed = true;
pageNotifier.dispose();