Flutter 当InteractiveViewer放大时,可拖动的反馈小部件会得到一个偏移量
我正在尝试将一个小部件拖动到InteractiveViewer上。Flutter 当InteractiveViewer放大时,可拖动的反馈小部件会得到一个偏移量,flutter,draggable,interactive,Flutter,Draggable,Interactive,我正在尝试将一个小部件拖动到InteractiveViewer上。 当比例为1.0时,代码工作正常。 但是,如果放大,当我拖动圆时: 反馈小部件在右下角偏移了几个像素 当我放开时,圆圈向上移动 为什么会这样 下面是一个演示,演示了我所说的内容: 下面是这个应用程序的代码 导入“包装:颤振/材料.省道”; void main(){ runApp(MyApp()); } 类MyApp扩展了无状态小部件{ //此小部件是应用程序的根。 @凌驾 小部件构建(构建上下文){ 返回材料PP( 标题:“颤振
当比例为1.0时,代码工作正常。
但是,如果放大,当我拖动圆时:
导入“包装:颤振/材料.省道”;
void main(){
runApp(MyApp());
}
类MyApp扩展了无状态小部件{
//此小部件是应用程序的根。
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“颤振演示”,
主题:主题数据(
主样本:颜色。蓝色,
),
主页:MyHomePage(标题:“颤振演示主页”),
);
}
}
枚举_动作{scale,pan}
类MyHomePage扩展StatefulWidget{
MyHomePage({Key,this.title}):超级(Key:Key);
最后的字符串标题;
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
常量_defaultMarkerSize=48.0;
类_MyHomePageState扩展状态{
偏移量_pos=Offset.zero;//位置可以在两个方向上从-1变为1
_Action;//平移或挤压,用于了解是否需要缩小销的比例
最终_transformationController=transformationController();
@凌驾
小部件构建(构建上下文){
最终比例=_transformationController.value.getMaxScaleOnAxis();
最终尺寸=_默认标记尺寸/比例;
返回脚手架(
appBar:appBar(标题:Text(widget.title)),
正文:InteractiveViewer(
transformationController:\u transformationController,
最大刻度:5,
小规模:1,
子:堆栈(
儿童:[
中心(子项:Image.asset('Image/board.png')),
牵引销(
位置:_位置,
尺寸:尺寸,
onDragEnd:(详情){
最终矩阵=矩阵4.倒置(_transformationController.值);
最终高度=AppBar().preferredSize.height;
最终场景=details.offset.dy-高度;
最终视口点=MatrixUtils.transformPoint(
矩阵,
偏移量(details.Offset.dx,sceneY)+偏移量(_defaultMarkerSize/2,_defaultMarkerSize/2),
);
最终屏幕大小=MediaQuery.of(context).size;
最终x=viewportPoint.dx*2/screenSize.width-1;
最终y=viewportPoint.dy*2/screenSize.height-1;
设置状态(){
_pos=偏移量(x,y);
});
},
),
],
),
onInteractionStart:(详细信息){
//不需要调用setState,因为我们不需要重建
action=null;
},
onInteractionUpdate:(详细信息){
if(action==null){
如果(details.scale==1)
action=\u action.pan;
其他的
动作=_action.scale;
}
如果(动作==\u动作比例){
//需要调整管脚的大小,以便它们保持相同的大小
setState((){});
}
},
),
浮动操作按钮:浮动操作按钮(
子:图标(Icons.restore),
已按下:(){
设置状态(){
_pos=偏移量0;
});
},
),
);
}
}
类DragTablePin扩展了无状态小部件{
最终偏置位置;
最终双倍尺寸;
最终孔隙函数(DraggableDetails)onDragEnd;
const DraggablePin({this.pos,this.size,this.onDragEnd,Key}):super(Key:Key);
@凌驾
小部件构建(构建上下文){
最终偏移量=尺寸/2;
小部件pinWidget=Pin(大小);
最终屏幕大小=MediaQuery.of(context).size;
最终高度=screenSize.height-AppBar().preferredSize.height;
pinWidget=可拖动(
孩子:pinWidget,
反馈:Pin(_defaultMarkerSize),
ChildWhenDraging:容器(),
翁德拉根德:翁德拉根德,
);
返回定位(
顶部:位置dy*高度/2+高度/2-偏移,
左:pos.dx*screenSize.width/2+screenSize.width/2-偏移,
孩子:pinWidget,
);
}
}
类Pin扩展了无状态小部件{
const Pin(this.size,{Key}):super(Key:Key);
最终双倍尺寸;
@凌驾
小部件构建(构建上下文){
退货(
颜色:颜色。透明,
儿童:中心(
孩子:墨水(
装饰:造型装饰(
颜色:颜色。绿色,
形状:const CircleBorder(),
),
孩子:我的钮扣(
约束:BoxConstraints.tightFor(宽度:大小,高度:大小),
填充:常量边集。全部(0),
iconSize:大小,
飞溅半径:尺寸/2,
颜色:颜色。白色,
图标:Container(),
按下:(){},
),
),
),
);
}
}
您是否设法修复了它?有同样的问题。不幸的是,没有……不知道我们是否应该在it的github创建一个颤振问题(请随意竖起大拇指;)