Flutter 当InteractiveViewer放大时,可拖动的反馈小部件会得到一个偏移量

Flutter 当InteractiveViewer放大时,可拖动的反馈小部件会得到一个偏移量,flutter,draggable,interactive,Flutter,Draggable,Interactive,我正在尝试将一个小部件拖动到InteractiveViewer上。 当比例为1.0时,代码工作正常。 但是,如果放大,当我拖动圆时: 反馈小部件在右下角偏移了几个像素 当我放开时,圆圈向上移动 为什么会这样 下面是一个演示,演示了我所说的内容: 下面是这个应用程序的代码 导入“包装:颤振/材料.省道”; void main(){ runApp(MyApp()); } 类MyApp扩展了无状态小部件{ //此小部件是应用程序的根。 @凌驾 小部件构建(构建上下文){ 返回材料PP( 标题:“颤振

我正在尝试将一个小部件拖动到InteractiveViewer上。
当比例为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创建一个颤振问题(请随意竖起大拇指;)