Bug fix where MouseScrollWheel zoom in flutter-web does not execute onInteraction functions (#65313)
This commit is contained in:
parent
f78b27e41a
commit
e122238c7a
1
AUTHORS
1
AUTHORS
@ -65,3 +65,4 @@ CaiJingLong <cjl_spy@163.com>
|
|||||||
Alex Li <google@alexv525.com>
|
Alex Li <google@alexv525.com>
|
||||||
Ram Navan <hiramprasad@gmail.com>
|
Ram Navan <hiramprasad@gmail.com>
|
||||||
meritozh <ah841814092@gmail.com>
|
meritozh <ah841814092@gmail.com>
|
||||||
|
Terrence Addison Tandijono(flotilla) <terrenceaddison32@gmail.com>
|
||||||
|
@ -746,6 +746,7 @@ class _InteractiveViewerState extends State<InteractiveViewer> with TickerProvid
|
|||||||
rotation: details.rotation,
|
rotation: details.rotation,
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
final Offset focalPointScene = _transformationController.toScene(
|
final Offset focalPointScene = _transformationController.toScene(
|
||||||
details.localFocalPoint,
|
details.localFocalPoint,
|
||||||
);
|
);
|
||||||
@ -918,6 +919,22 @@ class _InteractiveViewerState extends State<InteractiveViewer> with TickerProvid
|
|||||||
_transformationController.value,
|
_transformationController.value,
|
||||||
focalPointSceneScaled - focalPointScene,
|
focalPointSceneScaled - focalPointScene,
|
||||||
);
|
);
|
||||||
|
if (widget.onInteractionStart != null) {
|
||||||
|
widget.onInteractionStart(
|
||||||
|
ScaleStartDetails(focalPoint: focalPointSceneScaled)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (widget.onInteractionUpdate != null) {
|
||||||
|
widget.onInteractionUpdate(ScaleUpdateDetails(
|
||||||
|
rotation: 0.0,
|
||||||
|
scale: scaleChange,
|
||||||
|
horizontalScale: 1.0,
|
||||||
|
verticalScale: 1.0,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
if (widget.onInteractionEnd != null) {
|
||||||
|
widget.onInteractionEnd(ScaleEndDetails());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -623,6 +623,46 @@ void main() {
|
|||||||
expect(transformationController.value.getMaxScaleOnAxis(), equals(1.0));
|
expect(transformationController.value.getMaxScaleOnAxis(), equals(1.0));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
testWidgets('Scale with mouse returns onInteraction properties', (WidgetTester tester) async{
|
||||||
|
final TransformationController transformationController = TransformationController();
|
||||||
|
double scaleChange;
|
||||||
|
Velocity currentVelocity;
|
||||||
|
bool calledStart;
|
||||||
|
await tester.pumpWidget(
|
||||||
|
MaterialApp(
|
||||||
|
home: Scaffold(
|
||||||
|
body: Center(
|
||||||
|
child: InteractiveViewer(
|
||||||
|
transformationController: transformationController,
|
||||||
|
onInteractionStart: (ScaleStartDetails details){
|
||||||
|
calledStart = true;
|
||||||
|
},
|
||||||
|
onInteractionUpdate: (ScaleUpdateDetails details){
|
||||||
|
scaleChange = details.scale;
|
||||||
|
},
|
||||||
|
onInteractionEnd: (ScaleEndDetails details){
|
||||||
|
currentVelocity = details.velocity;
|
||||||
|
},
|
||||||
|
child: Container(width: 200.0, height: 200.0),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
final Offset center = tester.getCenter(find.byType(InteractiveViewer));
|
||||||
|
await scrollAt(center, tester, const Offset(0.0, -20.0));
|
||||||
|
await tester.pumpAndSettle();
|
||||||
|
const Velocity noMovement = Velocity(pixelsPerSecond: Offset(0,0));
|
||||||
|
final double afterScaling = transformationController.value.getMaxScaleOnAxis();
|
||||||
|
|
||||||
|
expect(scaleChange,greaterThan(1.0));
|
||||||
|
expect(afterScaling, isNot(equals(null)));
|
||||||
|
expect(afterScaling, isNot(equals(1.0)));
|
||||||
|
expect(currentVelocity, equals(noMovement));
|
||||||
|
expect(calledStart, equals(true));
|
||||||
|
});
|
||||||
|
|
||||||
testWidgets('viewport changes size', (WidgetTester tester) async {
|
testWidgets('viewport changes size', (WidgetTester tester) async {
|
||||||
final TransformationController transformationController = TransformationController();
|
final TransformationController transformationController = TransformationController();
|
||||||
await tester.pumpWidget(
|
await tester.pumpWidget(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user