fix(mobile): improve hero animation (#3636)

This commit is contained in:
X 2023-08-10 21:38:49 +08:00 committed by GitHub
parent a8b01dc21a
commit e9b0840f01
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 73 additions and 81 deletions

View File

@ -62,11 +62,17 @@ class ThumbnailImage extends HookConsumerWidget {
}
Widget buildImage(Asset asset) {
var image = ImmichImage(
asset,
var image = SizedBox(
width: 300,
height: 300,
child: Hero(
tag: asset.id + heroOffset,
child: ImmichImage(
asset,
useGrayBoxPlaceholder: useGrayBoxPlaceholder,
fit: BoxFit.cover,
),
),
);
if (!multiselectEnabled || !isSelected) {
return image;
@ -114,8 +120,6 @@ class ThumbnailImage extends HookConsumerWidget {
onSelect?.call();
HapticFeedback.heavyImpact();
},
child: Hero(
tag: asset.id + heroOffset,
child: Stack(
children: [
Container(
@ -181,7 +185,6 @@ class ThumbnailImage extends HookConsumerWidget {
),
],
),
),
);
}
}

View File

@ -276,6 +276,7 @@ class _PhotoViewGalleryState extends State<PhotoViewGallery> {
filterQuality: pageOption.filterQuality,
basePosition: pageOption.basePosition,
disableGestures: pageOption.disableGestures,
heroAttributes: pageOption.heroAttributes,
child: pageOption.child,
)
: PhotoView(
@ -306,21 +307,9 @@ class _PhotoViewGalleryState extends State<PhotoViewGallery> {
basePosition: pageOption.basePosition,
disableGestures: pageOption.disableGestures,
errorBuilder: pageOption.errorBuilder,
heroAttributes: pageOption.heroAttributes,
);
if (pageOption.heroAttributes != null) {
return Hero(
tag: pageOption.heroAttributes!.tag,
createRectTween: pageOption.heroAttributes!.createRectTween,
flightShuttleBuilder: pageOption.heroAttributes!.flightShuttleBuilder,
placeholderBuilder: pageOption.heroAttributes!.placeholderBuilder,
transitionOnUserGestures: pageOption.heroAttributes!.transitionOnUserGestures,
child: ClipRect(
child: photoView,
),
);
}
return ClipRect(
child: photoView,
);

View File

@ -405,7 +405,7 @@ class PhotoViewCoreState extends State<PhotoViewCore>
gaplessPlayback: widget.gaplessPlayback ?? false,
filterQuality: widget.filterQuality,
width: scaleBoundaries.childSize.width * scale,
fit: BoxFit.contain,
fit: BoxFit.cover,
);
}
}