viewer: fixed view and minimap refresh after rotation
This commit is contained in:
parent
f2de483df8
commit
87bb1327df
2 changed files with 36 additions and 27 deletions
|
@ -35,29 +35,32 @@ class Minimap extends StatelessWidget {
|
||||||
valueListenable: multiPageController.pageNotifier,
|
valueListenable: multiPageController.pageNotifier,
|
||||||
builder: (context, page, child) {
|
builder: (context, page, child) {
|
||||||
final pageEntry = mainEntry.getPageEntry(multiPageInfo?.getByIndex(page));
|
final pageEntry = mainEntry.getPageEntry(multiPageInfo?.getByIndex(page));
|
||||||
return _buildForEntrySize(pageEntry.displaySize);
|
return _buildForEntrySize(pageEntry);
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
})
|
})
|
||||||
: _buildForEntrySize(mainEntry.displaySize),
|
: _buildForEntrySize(mainEntry),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget _buildForEntrySize(Size entrySize) {
|
Widget _buildForEntrySize(AvesEntry entry) {
|
||||||
return ValueListenableBuilder<ViewState>(
|
return ValueListenableBuilder<ViewState>(
|
||||||
valueListenable: viewStateNotifier,
|
valueListenable: viewStateNotifier,
|
||||||
builder: (context, viewState, child) {
|
builder: (context, viewState, child) {
|
||||||
final viewportSize = viewState.viewportSize;
|
final viewportSize = viewState.viewportSize;
|
||||||
if (viewportSize == null) return SizedBox.shrink();
|
if (viewportSize == null) return SizedBox.shrink();
|
||||||
return CustomPaint(
|
return AnimatedBuilder(
|
||||||
|
animation: entry.imageChangeNotifier,
|
||||||
|
builder: (context, child) => CustomPaint(
|
||||||
painter: MinimapPainter(
|
painter: MinimapPainter(
|
||||||
viewportSize: viewportSize,
|
viewportSize: viewportSize,
|
||||||
entrySize: entrySize,
|
entrySize: entry.displaySize,
|
||||||
viewCenterOffset: viewState.position,
|
viewCenterOffset: viewState.position,
|
||||||
viewScale: viewState.scale,
|
viewScale: viewState.scale,
|
||||||
minimapBorderColor: Colors.white30,
|
minimapBorderColor: Colors.white30,
|
||||||
),
|
),
|
||||||
size: size,
|
size: size,
|
||||||
|
),
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -111,7 +111,7 @@ class _EntryPageViewState extends State<EntryPageView> {
|
||||||
}
|
}
|
||||||
|
|
||||||
void _unregisterWidget() {
|
void _unregisterWidget() {
|
||||||
_magnifierController.dispose();
|
_magnifierController?.dispose();
|
||||||
_subscriptions
|
_subscriptions
|
||||||
..forEach((sub) => sub.cancel())
|
..forEach((sub) => sub.cancel())
|
||||||
..clear();
|
..clear();
|
||||||
|
@ -119,6 +119,9 @@ class _EntryPageViewState extends State<EntryPageView> {
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
final child = AnimatedBuilder(
|
||||||
|
animation: entry.imageChangeNotifier,
|
||||||
|
builder: (context, child) {
|
||||||
Widget child;
|
Widget child;
|
||||||
if (entry.isVideo) {
|
if (entry.isVideo) {
|
||||||
if (!entry.displaySize.isEmpty) {
|
if (!entry.displaySize.isEmpty) {
|
||||||
|
@ -133,6 +136,9 @@ class _EntryPageViewState extends State<EntryPageView> {
|
||||||
entry: entry,
|
entry: entry,
|
||||||
onTap: () => onTap?.call(null),
|
onTap: () => onTap?.call(null),
|
||||||
);
|
);
|
||||||
|
return child;
|
||||||
|
},
|
||||||
|
);
|
||||||
|
|
||||||
return widget.heroTag != null
|
return widget.heroTag != null
|
||||||
? Hero(
|
? Hero(
|
||||||
|
@ -201,8 +207,8 @@ class _EntryPageViewState extends State<EntryPageView> {
|
||||||
@required Widget child,
|
@required Widget child,
|
||||||
}) {
|
}) {
|
||||||
return Magnifier(
|
return Magnifier(
|
||||||
// key includes size and orientation to refresh when the image is rotated
|
// key includes modified date to refresh when the image is modified by metadata (e.g. rotated)
|
||||||
key: ValueKey('${entry.pageId}_${entry.rotationDegrees}_${entry.isFlipped}_${entry.width}_${entry.height}_${entry.path}'),
|
key: ValueKey('${entry.pageId}_${entry.dateModifiedSecs}'),
|
||||||
controller: _magnifierController,
|
controller: _magnifierController,
|
||||||
childSize: entry.displaySize,
|
childSize: entry.displaySize,
|
||||||
minScale: minScale,
|
minScale: minScale,
|
||||||
|
|
Loading…
Reference in a new issue