Flutter GestureDetector 和 SmoothStarRaiting
Flutter GestureDetector and SmoothStarRaiting
我遇到了 GestureDetector 包装 SmoothStarRating 的问题,由于某些奇怪的原因,onHorizontalDragEnd 不起作用。我只能检测到 onTap 或 onLongPressEnd。
onRatingChanged 运行良好,但它在拖动和更新评级时多次调用 BE。这就是为什么我用 GestureDetector 包装它(仅在拖动完成时更新评级)。
有谁知道如何解决这个问题?
我在下面附上一段代码。
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),
您使用的是哪个版本的软件包?我假设它低于 v1.1.0
,因为您的代码包含现已删除的 onRatingChanged
回调。
如果我对您的问题的理解正确:您对评级更改事件执行了昂贵的操作,因此您需要对事件进行去抖动。
如果我的评估是正确的,那很简单:您需要将软件包升级到 v1.1.0,因为它会改变 onRated
的行为,有效地消除它的抖动:
onRated will be called only once for each rating action.For a rating value n , the onRated callback value when half star rating is enabled will be n.5 . Eg: 2.5,3.5 etc.Otherwise the onRated callback value will be n.
注意:回调的名称已更改为 onRated
(从 onRatingChanged
)。否则,您的代码应该可以正常工作。
我遇到了 GestureDetector 包装 SmoothStarRating 的问题,由于某些奇怪的原因,onHorizontalDragEnd 不起作用。我只能检测到 onTap 或 onLongPressEnd。 onRatingChanged 运行良好,但它在拖动和更新评级时多次调用 BE。这就是为什么我用 GestureDetector 包装它(仅在拖动完成时更新评级)。 有谁知道如何解决这个问题?
我在下面附上一段代码。
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),
您使用的是哪个版本的软件包?我假设它低于 v1.1.0
,因为您的代码包含现已删除的 onRatingChanged
回调。
如果我对您的问题的理解正确:您对评级更改事件执行了昂贵的操作,因此您需要对事件进行去抖动。
如果我的评估是正确的,那很简单:您需要将软件包升级到 v1.1.0,因为它会改变 onRated
的行为,有效地消除它的抖动:
onRated will be called only once for each rating action.For a rating value n , the onRated callback value when half star rating is enabled will be n.5 . Eg: 2.5,3.5 etc.Otherwise the onRated callback value will be n.
注意:回调的名称已更改为 onRated
(从 onRatingChanged
)。否则,您的代码应该可以正常工作。