Wheel ListView 小部件内的颤动按钮

问题描述

我使用的是更具体的 ListWheelScrollViewclickable。 (clickable_list_wheel_view)

我试图在我的 button添加一个 itemWidget,但我无法点击它。这是我的list

return ClickableListWheelScrollView(
  scrollController: _scrollController,itemHeight: _itemHeight,itemCount: months.length,scrollOnTap: true,onItemTapCallback: (index) {
    print(index)
  },child: ListWheelScrollView.useDelegate(
    controller: _scrollController,itemExtent: _itemHeight,physics: FixedExtentScrollPhysics(),diameterRatio: 3,squeeze: 0.95,onselecteditemchanged: (index) {
      // print(index);
    },childDelegate: ListWheelChildBuilderDelegate(
      builder: (context,index) => MonthCardWidget(
        month: months[index],),childCount: months.length,);

在我的 MonthCardWidget 中,我有一个简单的 button

          Container(
            height: 45,width: 45,color: Colors.transparent,child: IconButton(
              splashColor: Colors.transparent,highlightColor: Colors.transparent,onpressed: () {
                print('flip');
              },icon: SvgPicture.asset('assets/images/flip.svg',height: 20,width: 20),

一切都显示得很好,但从未在我的 onpressed调用 button。我猜 GestureDetector 正在覆盖按钮?有什么解决方法吗?我在这方面找不到任何内容

GestureDetector 位于 listView 之上:

@override
  Widget build(BuildContext context) {
    if (_listHeight == .0) {
      return MeasureSize(
        child: Container(
          child: widget.child,onChange: (value) {
          setState(() {
            _listHeight = value.height;
          });
        },);
    }

    return GestureDetector(
      onTap: _onTap,onTapUp: (tapUpDetails) {
        _tapUpDetails = tapUpDetails?.localPosition;
      },child: widget.child,);
  }

解决方法

点击永远不会到达您的 GestureDetector,您需要在此处的 ClickableListWheelScrollView 中指定点击:

  onItemTapCallback: (index) {
print(index)

},

如果您拥有的打印件无法打印,请与 ClickableListWheelScrollView 插件发布者联系。您将需要逻辑来根据从 ClickableListWheelScrollView 传递的索引号通过按钮实现所需的更改,我认为......所以 setState 函数的映射可能会做到这一点。

把按钮想象成一个视图,你只是根据每个按钮在列表中的位置并行运行函数逻辑。按钮被埋在列表下面,你需要在ListWheel上面一层,也就是Clickable插件,但是很明显它变得和按钮断开了,所以你需要根据index值来创建逻辑来链接它们,也就是位置列表中的对象。

我通常做什么:

onSelectedItemChanged: (index) {
  // print(index);
},
  1. 这将返回列表中项目的索引位置。使用它来更改变量。

  2. 将您的滚动条包裹在 GestureDetector 中。

  3. 在手势检测器中,编写或调用一个函数,该函数接受您的索引位置变量并根据您的需要执行您的功能。

  4. 如果您需要控制滚动开始在列表中的位置,或者在重建时记住它的位置等,请使用带有 initialItem 的 FixedExtentScrollController。

一切都以这种方式从 onSelectedItemChanged 的​​索引脱离,并且您使用 FixedExtentScrollController 在构建时设置起始位置。请记住,列表从 0 开始。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...