gpt4 book ai didi

dart - 可拖动项目总是下降 80px 左右

转载 作者:IT王子 更新时间:2023-10-29 06:54:08 26 4
gpt4 key购买 nike

我对可拖动项目有奇怪的行为。

每次我将它拖到我的堆栈上时,它都会从放置位置下降大约 80 像素(这是一个近似值,对于另一部手机可能是其他值)。 x 值对我来说似乎没问题。

代码如下:

class GesturePage extends StatefulWidget {
@override
_GesturePageState createState() => _GesturePageState();
}

class _GesturePageState extends State<GesturePage> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Gesture"),
),
body: Stack(
children: <Widget>[
DragBox(Offset(0.0, 80.0)),
],
),
);
}
}

class DragBox extends StatefulWidget {
final Offset initPosition;
DragBox(this.initPosition);

@override
DragBoxState createState() => DragBoxState();
}

class DragBoxState extends State<DragBox> {
Offset position = Offset(0.0, 0.0);

@override
void initState() {
super.initState();
position = widget.initPosition;
}

@override
Widget build(BuildContext context) {
return Positioned(
left: position.dx,
top: position.dy - 80.0,
child: Draggable(
data: widget.itemColor,
child: Container(
child: Image.asset('images/item.png'),
),
onDraggableCanceled: (velocity, offset) {
setState(() {
position = offset;
});
},
feedback: Container(
child: Image.asset('images/item.png'),
),
),
);
}
}

有人知道这是怎么回事吗?

另外,有没有办法在拖动项目时实时查看 x 和 y 坐标?

编辑:在源代码中查找 80.0。这解决了我的问题,但仅适用于一种模拟器类型。还有另一个有趣的代码here

最佳答案

是的,事情很简单。您在 y 轴上的 80 差异包括

24 px = For Status bar
56 px = For App bar / Navigation bar

Total = 80 px

那是因为您正在接收全局位置,您需要将其转换为本地位置。这是你应该做的。

RenderBox referenceBox = context.findRenderObject();
Offset localPosition = referenceBox.globalToLocal(yourGlobalOffset);

编辑:

  1. 将您的 Positioned 作为 Stack 的子项。

  2. 用我的代替你的

    onDraggableCanceled: (velocity, offset) {
    setState(() {
    RenderBox renderBox = context.findRenderObject();
    _position = renderBox.globalToLocal(offset);
    });
    },

关于dart - 可拖动项目总是下降 80px 左右,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54163639/

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