我想要构建的小部件是一种可以使其子小部件变焦,类似于可变焦的行为。我想涵盖的手势包括:
提前致谢。
- 捏合缩放
- 双击缩放
- 点击获取小部件的本地位置
ZoomableWidget(
child: // My custom Widget which should be zoomable.
)
这是我的当前进展情况:
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:vector_math/vector_math_64.dart';
class ZoomableWidget extends StatefulWidget {
final Widget child;
const ZoomableWidget({Key key, this.child}) : super(key: key);
@override
_ZoomableWidgetState createState() => _ZoomableWidgetState();
}
class _ZoomableWidgetState extends State<ZoomableWidget> {
double _scale = 1.0;
double _previousScale;
@override
Widget build(BuildContext context) {
return ClipRect(
child: GestureDetector(
onScaleStart: (ScaleStartDetails details) {
_previousScale = _scale;
},
onScaleUpdate: (ScaleUpdateDetails details) {
setState(() {
_scale = _previousScale * details.scale;
});
},
onScaleEnd: (ScaleEndDetails details) {
_previousScale = null;
},
child: Transform(
transform: Matrix4.diagonal3(Vector3(_scale.clamp(1.0, 5.0),
_scale.clamp(1.0, 5.0), _scale.clamp(1.0, 5.0))),
alignment: FractionalOffset.center,
child: widget.child,
),
),
);
}
}
我遇到的问题是,我无法更改捏合手势的中心位置,因此即使我在角落处缩放,图像仍只在 (0,0) 处缩放。此外,我无法使用水平拖动和垂直拖动来滚动小部件。提前致谢。