Flutter LongPressDraggable 反馈位于容器的左上角而不是手指按下位置
Flutter LongPressDraggable feedback positioned at top left of a container instead of finger press position
我是 flutter 的新手,我正在尝试创建一个容器,当用户长按它时 - 一个可拖动的圆圈表明用户可以在容器的边界内移动。
我尝试了很多解决方案,但得出的结论可能是实现此目的的最佳方法是在容器上使用 LongPressDraggable
小部件,并将反馈设置为用户可以拖动的圆圈。问题是当我长按容器时,圆圈出现在容器的左上角而不是按下的位置。我也试过加feedbackOfsset
但是没有用(根本没有移动反馈位置,不知道为什么)。
同样根据文档示例,这应该按预期工作并显示正确位置的反馈。
我的代码:
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
home: Scaffold(
backgroundColor: Color.fromRGBO(239, 223, 224, 1.0),
body: Center(
child: Container(
width: 230,
height: 200,
color: Colors.purple,
child: LongPressDraggable<String>(
feedback: Container(
width: 80,
height: 80,
decoration: BoxDecoration(
color: const Color.fromRGBO(0, 0, 0, 0.6),
shape: BoxShape.circle,
border: Border.all(
width: 2,
color: const Color.fromRGBO(255, 255, 255, 0.8)
)
),
),
child: Container(
decoration: const BoxDecoration(
color: Colors.blue,
shape: BoxShape.circle,
),
),
),
),
)
)
);
}
要清楚 - 包装器容器是必需的,因为我在子容器中添加 Stack
(在本例中只是将其删除)
结果:(为了这个例子,我把包装容器涂成了紫色)
好吧,为了到达中心或手指所在的位置,我们调用 属性 :
dragAnchorStrategy : 此可拖动对象使用的策略,用于在拖动时获取锚点偏移量。
然后我们只 return Offset 两者的值为 40 因为它是 80 的一半(Container 大小), 如果你喜欢尝试输入 0,0 或 80,80 以查看差异。
body: Scaffold(
backgroundColor: const Color.fromRGBO(239, 223, 224, 1.0),
body: Center(
child: Container(
width: 230,
height: 200,
color: Colors.purple,
child: LongPressDraggable<int>(
dragAnchorStrategy:
(Draggable<Object> _, BuildContext __, Offset ___) =>
const Offset(40, 40), // here
feedback: Container(
width: 80,
height: 80,
decoration: BoxDecoration(
color: const Color.fromRGBO(0, 0, 0, 0.6),
shape: BoxShape.circle,
border: Border.all(
width: 2,
color: const Color.fromRGBO(255, 255, 255, 0.8),
),
),
),
child: Container(
decoration: const BoxDecoration(
color: Colors.blue,
shape: BoxShape.circle,
),
),
),
),
),
),
我是 flutter 的新手,我正在尝试创建一个容器,当用户长按它时 - 一个可拖动的圆圈表明用户可以在容器的边界内移动。
我尝试了很多解决方案,但得出的结论可能是实现此目的的最佳方法是在容器上使用 LongPressDraggable
小部件,并将反馈设置为用户可以拖动的圆圈。问题是当我长按容器时,圆圈出现在容器的左上角而不是按下的位置。我也试过加feedbackOfsset
但是没有用(根本没有移动反馈位置,不知道为什么)。
同样根据文档示例,这应该按预期工作并显示正确位置的反馈。
我的代码:
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
home: Scaffold(
backgroundColor: Color.fromRGBO(239, 223, 224, 1.0),
body: Center(
child: Container(
width: 230,
height: 200,
color: Colors.purple,
child: LongPressDraggable<String>(
feedback: Container(
width: 80,
height: 80,
decoration: BoxDecoration(
color: const Color.fromRGBO(0, 0, 0, 0.6),
shape: BoxShape.circle,
border: Border.all(
width: 2,
color: const Color.fromRGBO(255, 255, 255, 0.8)
)
),
),
child: Container(
decoration: const BoxDecoration(
color: Colors.blue,
shape: BoxShape.circle,
),
),
),
),
)
)
);
}
要清楚 - 包装器容器是必需的,因为我在子容器中添加 Stack
(在本例中只是将其删除)
结果:(为了这个例子,我把包装容器涂成了紫色)
好吧,为了到达中心或手指所在的位置,我们调用 属性 :
dragAnchorStrategy : 此可拖动对象使用的策略,用于在拖动时获取锚点偏移量。
然后我们只 return Offset 两者的值为 40 因为它是 80 的一半(Container 大小), 如果你喜欢尝试输入 0,0 或 80,80 以查看差异。
body: Scaffold(
backgroundColor: const Color.fromRGBO(239, 223, 224, 1.0),
body: Center(
child: Container(
width: 230,
height: 200,
color: Colors.purple,
child: LongPressDraggable<int>(
dragAnchorStrategy:
(Draggable<Object> _, BuildContext __, Offset ___) =>
const Offset(40, 40), // here
feedback: Container(
width: 80,
height: 80,
decoration: BoxDecoration(
color: const Color.fromRGBO(0, 0, 0, 0.6),
shape: BoxShape.circle,
border: Border.all(
width: 2,
color: const Color.fromRGBO(255, 255, 255, 0.8),
),
),
),
child: Container(
decoration: const BoxDecoration(
color: Colors.blue,
shape: BoxShape.circle,
),
),
),
),
),
),