gpt4 book ai didi

flutter - 如何为 Flutter 的 Material Slider Widget 添加新回调以访问触摸事件/非事件状态?

转载 作者:IT王子 更新时间:2023-10-29 06:56:59 26 4
gpt4 key购买 nike

我正在使用 Flutter 的 Material slider.dart 并且官方 widget 支持回调 onChanged, onChangeEndonChangeStart。这些开始和结束回调有点奇怪,因为它们在快速点击 slider 时触发,以及仍然按住的 slider 的触摸和滑动,然后在释放 slider 拇指时再次触发。我真正需要知道的是 slider 何时完全释放(通过快速点击或触摸和滑动)。

所以我找到了一种编辑 .../flutter/packages/flutter/lib/src/Material/slider.dart 的方法,可以将我需要的状态打印到控制台.我查看了所有 handleEvent 调用并添加了以下内容以了解触摸何时上升或下降(使用 event.runtimeType 查看更改):

  @override
void handleEvent(PointerEvent event, BoxHitTestEntry entry) {
if (event.runtimeType == PointerDownEvent) {
_touchActive = true;
print("---------Down!---------");
} else if (event.runtimeType == PointerUpEvent) {
_touchActive = false;
print("---------Up!---------");
}
assert(debugHandleEvent(event, entry));
if (event is PointerDownEvent && isInteractive) {
// We need to add the drag first so that it has priority.
_drag.addPointer(event);
_tap.addPointer(event);
}
}

但现在我需要以某种方式通过回调从小部件中取回该数据。回调可以类似于前面提到的三个中的任何一个,例如 onChangeStart 或 onChangeEnd,但我不确定我需要在哪里更新才能创建它。谁能帮我指出如何添加这个?

最佳答案

您必须添加 Slider 的其他成员类类似于 final ValueChanged<double> onChangeStart;并将它们添加到构造函数中。

当您想触发新事件时,您可以调用它们,类似于:widget?.onChangeStart(_lerp(value)); (我添加了 ? 以防您的回调为空。同样,您可以断言它不是:assert(widget.onChangeStart != null);)

放在一边 - 而不是 event.runtimeType == PointerDownEvent你可以使用 event is PointerDownEvent

关于flutter - 如何为 Flutter 的 Material Slider Widget 添加新回调以访问触摸事件/非事件状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56155182/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com