fix(mobile): simplify scale handling in photo_view_core.dart

This commit is contained in:
LeLunZ
2026-04-21 18:25:34 +02:00
parent fa11a9a01b
commit 10bc17dace
@@ -301,12 +301,7 @@ class PhotoViewCoreState extends State<PhotoViewCore>
controller.scaleAnimationBuilder(_animateControllerScale); controller.scaleAnimationBuilder(_animateControllerScale);
controller.rotationAnimationBuilder(_animateControllerRotation); controller.rotationAnimationBuilder(_animateControllerRotation);
final prevBoundaries = controller.scaleBoundaries; _updateScaleBoundaries();
if (prevBoundaries != null && prevBoundaries != widget.scaleBoundaries) {
_updateScaleBoundaries(prevBoundaries);
} else {
controller.scaleBoundaries = widget.scaleBoundaries;
}
_scaleAnimationController = AnimationController(vsync: this) _scaleAnimationController = AnimationController(vsync: this)
..addListener(handleScaleAnimation) ..addListener(handleScaleAnimation)
@@ -337,8 +332,11 @@ class PhotoViewCoreState extends State<PhotoViewCore>
widget.onTapDown?.call(context, details, controller.value); widget.onTapDown?.call(context, details, controller.value);
} }
void _updateScaleBoundaries(ScaleBoundaries prev) { void _updateScaleBoundaries() {
if (controller.scale != null && prev.initialScale > 0) { final prev = controller.scaleBoundaries;
if (prev == widget.scaleBoundaries) return;
if (prev != null && controller.scale != null && prev.initialScale > 0) {
final ratio = widget.scaleBoundaries.initialScale / prev.initialScale; final ratio = widget.scaleBoundaries.initialScale / prev.initialScale;
controller.setScaleInvisibly(controller.scale! * ratio); controller.setScaleInvisibly(controller.scale! * ratio);
} else { } else {
@@ -350,9 +348,7 @@ class PhotoViewCoreState extends State<PhotoViewCore>
@override @override
void didUpdateWidget(PhotoViewCore oldWidget) { void didUpdateWidget(PhotoViewCore oldWidget) {
super.didUpdateWidget(oldWidget); super.didUpdateWidget(oldWidget);
if (widget.scaleBoundaries != oldWidget.scaleBoundaries) { _updateScaleBoundaries();
_updateScaleBoundaries(oldWidget.scaleBoundaries);
}
} }
@override @override