Flutter GestureDetector 和 SmoothStarRaiting

Posted

技术标签:

【中文标题】Flutter GestureDetector 和 SmoothStarRaiting【英文标题】:Flutter GestureDetector and SmoothStarRaiting 【发布时间】:2020-11-21 22:57:08 【问题描述】:

我遇到了 GestureDetector 包装 SmoothStarRating 的问题,由于某些奇怪的原因 onHorizo​​ntalDragEnd 不起作用。我只能检测到 onTap 或 onLongPressEnd。 onRatingChanged 运行良好,但它在拖动和更新评级时多次调用 BE。这就是为什么我用 GestureDetector 包装它(仅在拖动完成时更新评级)。 有谁知道如何解决这个问题?

我在下面附上一个代码sn-p。

GestureDetector(
  onHorizontalDragEnd: (detail)
    print("on drug end doesnt work");
    // when drug is finished update record in DB
  ,
  onLongPressEnd: (detail)
    print("this works");

  ,
  child: Container(
    child: SmoothStarRating(
        allowHalfRating: true,
        onRatingChanged: (v) 
                // sending Bloc event to update raiting
              ,
        starCount: 5,
        rating: (rating),

【问题讨论】:

【参考方案1】:

您使用的是哪个版本的软件包?我假设它低于v1.1.0,因为您的代码包含现已删除的onRatingChanged 回调。

如果我正确理解您的问题:您对评级更改事件执行了昂贵的操作,因此您需要对事件进行去抖动。

如果我的评估是正确的,那很简单:你需要将包升级到v1.1.0,因为它会改变onRated 的行为,从而有效地消除它:

onRated 对于每个评分操作只会调用一次。对于评分值 n ,启用半星评分时的 onRated 回调值为 n.5 。 eg: 2.5,3.5 etc.否则onRated回调值为n。

注意:回调的名称已更改为onRated(来自onRatingChanged)。否则,您的代码应该可以正常工作。

【讨论】:

我已按照您的建议将软件包的版本更新为 1.1.0。但不幸的是,它并没有解决我的问题。 onRated 的行为是相同的,当我拖拽开始时,BE 被多次调用。在我的情况下,这是不可接受的,因为 BE 发送后台通知......所以用户会收到很多通知而不是一个。 问题是当我设置 isReadOnly 的星级 = true 属性时。 GestureDetector 的 OnPanEnd 和 OnDrugEnd 工作得很好。所以我想有冲突,这就是为什么我不能同时使用这两个 SmoothStarRaiting 处理水平拖动(如果不是只读的),所以你不能真正使用它。您最好的选择是消除onRated 的结果。或者,如果您真的想自己处理拖动,只需查看代码,将其变为您自己的代码并进行更改。 去抖效果很好!谢谢)))))

以上是关于Flutter GestureDetector 和 SmoothStarRaiting的主要内容,如果未能解决你的问题,请参考以下文章

flutter系列之:移动端的手势基础GestureDetector

如何检测 GestureDetector 是不是悬停在 Flutter 中?

无法按下具有 Navigator.push 功能的 Flutter Button (GestureDetector)

如何在 Flutter 中使用 GestureDetector 隐藏 appBar?

flutter GestureDetector 点击空白区域无反应解决办法

Flutter - 更新 GestureDetector Tap 上的视图