Flutter GestureDetector 和 SmoothStarRaiting
Posted
技术标签:
【中文标题】Flutter GestureDetector 和 SmoothStarRaiting【英文标题】:Flutter GestureDetector and SmoothStarRaiting 【发布时间】:2020-11-21 22:57:08 【问题描述】:我遇到了 GestureDetector 包装 SmoothStarRating 的问题,由于某些奇怪的原因 onHorizontalDragEnd 不起作用。我只能检测到 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?