onTapDown和其他来自GestureDetector()的回调被延迟

时间:2019-03-19 10:07:37

标签: dart flutter

我目前正在使用GestureDetector()AnimatedContainer()创建自定义按钮。

目标是一旦用户按下并释放按钮,就会获得某种动画效果,比例,颜色,阴影或其他任何形式。

我现在的问题是onTapDown()回调被延迟了。可能是因为此按钮实际上是SliverList中的一项,导致延迟。但是,如果我在不滚动的情况下点击GestureDetector,则需要花费几百毫秒的时间才能触发onTapDown回调。为什么?

我确实知道,抖动以及基本上任何其他UI框架都需要对列表中的对象进行某种形式的延迟触摸。它必须确定用户要滚动还是按下按钮。

但是您有任何想法,一旦用户按下该容器,如何显示漂亮的比例动画?

这是包含SliverList的{​​{1}}(然后它会对触摸输入做出反应)。

RecipeMetaItem

这是SliverList( delegate: SliverChildBuilderDelegate((BuildContext context, int index) { MetaItem metaItem = state.metaItems[index]; return RecipeMetaItem(metaItem: metaItem, height: 178); }, childCount: state.metaItems.length, ), )

的一部分
RecipeMetaItem()

谢谢!

1 个答案:

答案 0 :(得分:0)

不知道您是否解决了这个问题,但是我在S.O上发现了类似的问题。我认为相同的解决方案可能对您有用!

尝试将GestureDetector切换到侦听器并替换:

onTapDown: (details) {
  setState(() {
    offset = -10;
  });
},
onTapUp: (details) {
  setState(() {
    offset = 0;
  });
},

具有:

onPointerDown: (PointerDownEvent event) {
  setState(() {
    offset = -10;
  });
},
onPointerUp: (PointerUpEvent event) {
  setState(() {
    offset = 0;
  });
},

希望能解决此问题,在这种情况下,问题将是GestureDetector,而不是子窗口小部件。