GestureDetector 不适用于 Dismissible Widget

GestureDetector is not working with Dismissible Widget

我正在尝试在使用 Dismissible 小部件时获得 拖动偏移量 。所以尝试用 GestureDetector 包装它,但它的 onHorizo​​ntalDragStart 不起作用。
尝试了任何一种方式,即将 GestureDetector 作为子级Dismissible 但随后 Dismissible 停止工作
如何解决这个问题?谢谢...

ListView.builder(
  itemCount: items.length,
  itemBuilder: (context, index) {
    var item = items[index];
    return GestureDetector(
      onHorizontalDragStart: (e) {
        print(e);
      },
      child: Dismissible(
        key: ValueKey(item),
        background: Container(
          color: Colors.teal,
        ),
        child: ListTile(
          title: Text("item $item"),
        ),
        onDismissed: (d) {
          items.remove(item);
        },
      ),
    );
  },
);

嵌套手势小部件

您遇到此问题的原因是因为这两个小部件都接收触摸输入,并且当您有两个接收触摸输入的小部件时,长话短说 child 赢得了这场战斗。说来话长。因此,来自 DismissibleGestureDetector 的两个输入都会发送到所谓的 GestureArena。那里的竞技场考虑了多种不同的因素,但故事的结局是 child 总是赢家。您可以通过使用自己的 GestureFactory 定义自己的 RawGestureDetector 来解决此问题,这将改变竞技场的执行方式。

ListView.builder(
      physics: AlwaysScrollableScrollPhysics(),
      itemCount: items.length,
      itemBuilder: (BuildContext context, int index) {
        var item = items[index];
        return Listener(
          child: Dismissible(
            key: ValueKey(item),
            child: ListTile(
              title: Text('This is some text'),
            ),
            onDismissed: (DismissDirection direction) {
              items.remove(index);
            },
          ),
          onPointerMove: (PointerMoveEvent move) {
            if (move.localDelta.dx > 1) {//Ideally this number whould be 
//(move.localDelta.dx != 0) but that is too sensitive so you can play with 
//this number till you find something you like. 
              print(move.position);
            }
          },
        );
      },
    );

我想把所有的功劳都归功于 Flutter Deep Dive: Gestures 的作者纳什,这是一篇很棒的文章,我强烈建议您查看。