我对可拖动项目有奇怪的行为。
每次我将它拖到堆栈上时,它都会从放置位置向下下降约 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'),
),
),
);
}
}
Run Code Online (Sandbox Code Playgroud)
有人明白发生了什么事吗?
另外,有没有办法在拖动项目时能够实时看到 x 和 y 坐标?
编辑: 在源代码中查找 80.0。这解决了我的问题,但仅适用于一种模拟器类型。这里还有另一个有趣的代码
是的,事情很简单。y 轴上的 80 差异包括
24 px = For Status bar
56 px = For App bar / Navigation bar
Total = 80 px
Run Code Online (Sandbox Code Playgroud)
那是因为您正在接收全球位置,您需要将其转换为本地位置。这是你应该做的。
RenderBox referenceBox = context.findRenderObject();
Offset localPosition = referenceBox.globalToLocal(yourGlobalOffset);
Run Code Online (Sandbox Code Playgroud)
编辑:
让你Positioned成为 的孩子Stack。
把你的换成我的
onDraggableCanceled: (velocity, offset) {
setState(() {
RenderBox renderBox = context.findRenderObject();
_position = renderBox.globalToLocal(offset);
});
},
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
761 次 |
| 最近记录: |