我正在尝试使用GridView.custom创建一个拖放操作。我希望发生的是,当拖动一个项目时,如果它到达屏幕的顶部或底部,网格视图就会滚动。是否有一种内置的方法可以做到这一点,或者是否有一种必须实现的解决方案。在本例中,我使用flutter_staggered_grid_view包。
GridView.custom(
shrinkWrap: true,
primary: false,
scrollDirection: Axis.vertical,
gridDelegate: SliverQuiltedGridDelegate(
crossAxisCount: 4,
mainAxisSpacing: 10,
crossAxisSpacing: 10,
repeatPattern: QuiltedGridRepeatPattern.inverted,
pattern: widget.pattern,
),
childrenDelegate: SliverChildBuilderDelegate(
childCount: widget.children.length,
(context, index) {
var selectedWidget = widget.children[index];
LongPressDraggable<GlobalKey>(
data: selectedWidget.key,
onDragStarted: _onDragStarted,
onDragEnd: _onDragEnd,
feedback:
SizedBox(width: 100, height: 100, child: selectedWidget),
childWhenDragging: Container(),
child: DragTarget<GlobalKey>(
builder: (context, accepted, rejected) => selectedWidget,
onWillAccept: (GlobalKey? accept) {
return true;
},
onAccept: (GlobalKey item) {
int startIndex =
widget.children.indexWhere((x) => x.key == item);
int endIndex = widget.children
.indexWhere((x) => x.key == selectedWidget.key);
widget.onReorder(startIndex, endIndex);
},
),
)
},
),
);
1条答案
按热度按时间rsaldnfx1#
比较
GridView
区域中Y轴的Draggable
位置。这是样品如果
Draggle
位于高度为20的顶部区域,则向上滚动;如果Draggle
位于高度为20的底部区域,则向下滚动。