dart onDoubleTap在不生成事件的情况下降低了GestureDetector的性能

yhuiod9q  于 2023-09-28  发布在  其他
关注(0)|答案(1)|浏览(99)

预期效果:

如果我不双击,我不希望表现有什么不同。

实际结果:

我添加了双击事件,并注意到通过简单地添加它,应用程序的性能大大降低。另一方面,如果我注解了该行,那么性能将返回稳定。
如果我制造了任何性能问题,我会在双击时预料到它们。但只要加上表演急剧下降的事件线。

验证码

void _startOperation(BuildContext ctx) {
_timer = Timer(const Duration(milliseconds: 150), () {
  isLongPressed = true;
  if (!widget.cell.isShowed) {
    Provider.of<GameModelProvider>(ctx, listen: false).setFlag(widget.cell);
    HapticFeedback.mediumImpact();
  }
});
}

Widget build(BuildContext context) {
return GestureDetector(
  onDoubleTap: () => Provider.of<GameModelProvider>(context, listen: false)
      .speedOpenCell(widget.cell),
  onTapDown: (_) {
    _startOperation(context);
  },
  onTapUp: (_) {
    if (!isLongPressed) {
      Provider.of<GameModelProvider>(context, listen: false)
          .computeCell(widget.cell);
    } else {
      isLongPressed = false;
    }
    _timer.cancel();
  },
  child: Container(
    width: widget.cellWidth,
    height: widget.cellHeight,
    decoration: BoxDecoration(
      color: widget.cell.isShowed
          ? Colors.grey.shade300
          : Colors.grey.shade400,
      borderRadius: BorderRadius.circular(5.0),
    ),
    child: Padding(
      padding: const EdgeInsets.all(3.0),
      child: Center(
        child: getContent(),
      ),
    ),
  ),
);
}

你可以在这里得到所有的代码:https://github.com/EliaTolin/infinity_sweeper

8xiog9wr

8xiog9wr1#

这并不是说性能已经改变,只是延迟,因为 Flutter 框架现在必须等待(300ms)以确定手势实际上是双击还是单击。

相关问题