工作中遇到一个小问题,实现一个可以进行缩放窗口大小和移动窗口位置的功能。需要使用到onPanUpdate手势和onScaleUpdate手势。
GestureDetector中使用了onPanUpdate手势和onScaleUpdate导致出现了冲突报红字错误:
Having both a pan gesture recognizer and a scale gesture recognizer is redundant; scale is a
superset of pan.
一、首先详细了解一下这两个手势功能:
1、onPanUpdate为滑动手势
Swipe(滑动):
onPanUpdate: 当用户在屏幕上拖动时连续触发。
onPanStart: 当滑动开始时触发。
onPanEnd: 当滑动结束时触发。
2、onScaleUpdate为缩放手势
Scale(缩放):
onScaleStart: 当缩放开始时触发。
onScaleUpdate: 在缩放过程中连续触发。
onScaleEnd: 缩放结束时触发。
二、出现此问题的原因Flutter的解释为:同时拥有平移手势识别器和缩放手势识别器是多余的,直接使用缩放手势即可
三、解决办法:目前在网上找到几篇文章使用过体验感没有那么好
1、https://blog.csdn.net/m0_46278918/article/details/125223821 手绘板的制作——画布缩放
2、https://www.5axxw.com/questions/content/c2mx4j#google_vignette Incorrect GestureDetector arguments
四、解决思路
目前我使用的办法是在窗口上面添加一个长按onLongPress手势,
长按情况下可以取消和选中状态,选中状态下可以进行移动窗口,非选中状态使用onScaleUpdate手势,选中状态下使用onPanUpdate手势。
@override
Widget build(BuildContext context) {
return isCanMove ? canDragWidget() : canScaleWidget();
}
另辟蹊径解决此问题。