【问题标题】:GestureDetector is not working with Dismissible WidgetGestureDetector 不适用于 Dismissible Widget
【发布时间】:2020-04-15 05:18:08
【问题描述】:

我正在尝试在使用 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);
        },
      ),
    );
  },
);

【问题讨论】:

    标签: flutter gesturedetector dismissible


    【解决方案1】:

    嵌套手势小部件

    您遇到此问题的原因是因为这两个小部件都接收触摸输入,并且当您有两个小部件接收触摸输入时,长话短说孩子赢得了这场战斗。这是长篇大论。因此,来自Dismissible 和GestureDetector 的输入都发送到所谓的GestureArena。那里的竞技场考虑了多种不同的因素,但故事的结局是孩子总是赢。您可以通过使用自己的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 的作者 Nash,这是一篇很棒的文章,我强烈建议您查看。

    【讨论】:

    • Thnx 老兄,让我试试,会回复你的。
    • 兄弟,这真的很有帮助,但我仍然找不到将手势事件传递给 Dismissible 小部件的方法。
    • 我想在滑动项目以关闭时阅读拖动更新。
    • 所以你说Dismissable 仍然没有响应
    • 是的。您提供的示例用于实现两个检测器并将事件传递给父级。在我的例子中,一个是检测器,另一个是内部实现检测器的 Dismissible,那么如何实现呢。
    猜你喜欢
    • 1970-01-01
    • 2022-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-05
    • 1970-01-01
    • 2020-09-10
    • 1970-01-01
    相关资源
    最近更新 更多