I am trying to get some basic pan and zoom functions for images. A stateless version can display images (rotated 180 degrees by Transform), and Scale events are displayed in logs, but that is.
Are the GestureDetectorcorrect widgets for receiving pan / pinch / spread events? Should I look at Transform, Animation or do I need to change the fields inside the widget Image?
Stateless version
// Wraps an Image widget to provide pan and zoom functionality.
class InteractiveImage extends StatelessWidget {
InteractiveImage(this._image, {Key key}) : super(key: key);
final Image _image;
@override
Widget build(BuildContext context) {
return new Center(
child: new GestureDetector(
onScaleStart: (ScaleStartDetails details) => print(details),
onScaleUpdate: (ScaleUpdateDetails details) => print(details),
onScaleEnd: (ScaleEndDetails details) => print(details),
child: new Transform(
transform: new Matrix4.rotationZ(math.PI),
alignment: FractionalOffset.center,
child: _image,
),
),
);
}
}
Statused version (not working)
// Wraps an Image widget to provide pan and zoom functionality.
class InteractiveImage extends StatefulWidget {
InteractiveImage(this._image, {Key key}) : super(key: key);
final Image _image;
@override
_InteractiveImageState createState() => new _InteractiveImageState(_image);
}
class _InteractiveImageState extends State<InteractiveImage> {
_InteractiveImageState(this._image);
final Image _image;
@override
Widget build(BuildContext context) {
setState(() => print("STATE SET\n"));
return new GestureDetector(
onScaleStart: (ScaleStartDetails details) => print(details),
onScaleUpdate: (ScaleUpdateDetails details) => print(details),
onScaleEnd: (ScaleEndDetails details) => print(details),
child: new Transform(
transform: new Matrix4.rotationZ(math.PI),
alignment: FractionalOffset.center,
child: _image,
),
);
}
}
Update (library solution)
Use https://pub.dartlang.org/packages/zoomable_image
(And maybe it will help me add physics and elastic edges?)