gpt4 book ai didi

Flutter 可缩放小部件

转载 作者:行者123 更新时间:2023-12-02 04:07:02 27 4
gpt4 key购买 nike

我想要构建的是一个小部件,可以使其子小部件可缩放,类似于可缩放行为。

我想要涵盖的手势是

  1. 捏合缩放
  2. 双击缩放
  3. 点击即可获取小部件的本地位置

这是我的小部件计划:

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) 处缩放。另外,我无法访问水平拖动和垂直拖动来滚动小部件。

提前致谢。

最佳答案

截至Flutter 1.20 , InteractiveViewer小部件支持平移和缩放。
要使任何小部件可缩放,您只需使用 InteractiveViewer 包裹子部件即可。

@override
Widget build(BuildContext context) {
return Center(
child: InteractiveViewer(
panEnabled: false, // Set it to false to prevent panning.
boundaryMargin: EdgeInsets.all(80),
minScale: 0.5,
maxScale: 4,
child: FlutterLogo(size: 200),
),
);
}

关于Flutter 可缩放小部件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56423707/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com