onDoubleTap 会降低 GestureDetector 的性能而不生成事件

发布于 2025-01-13 13:07:39 字数 1553 浏览 0 评论 0原文

预期结果

如果不双击,我预计性能不会有差异。

实际结果

我添加了双击事件,并注意到仅通过添加它,应用程序的性能就会大大降低。 另一方面,如果我评论该行,那么性能将恢复稳定。

如果我造成了任何性能问题,双击就会出现。 但只要加上性能急剧下降的事件线。

代码

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< /a>

Expected results:

I don't expect a difference in performance if I don't double tap.

Actual results:

I added the double tap event and noticed that by simply adding it, the performance of the application is greatly diminished.
If, on the other hand, I comment the line, then the performance returns stable.

If I had created any performance problems I would expect them if I double tap.
But just add the event line that the performances drop drastically.

Code

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(),
      ),
    ),
  ),
);
}

You get all code here : https://github.com/EliaTolin/infinity_sweeper

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一口甜 2025-01-20 13:07:39

这并不是说性能发生了变化,只是存在延迟,因为 flutter 框架现在必须等待(300 毫秒)才能确定手势实际上是双击还是单击。

It’s not that the performance has changed there is just latency because the flutter framework now has to wait (300ms) to determine if the gesture is actually a double tap versus a single tap.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文