首页 > 解决方案 > onTap 不适用于 ListWheelScrollView 子项 - Flutter

问题描述

我正在尝试列出使用的项目,ListWheelScrollView并且我想拥有tapping对项目的能力,但它似乎onTap不起作用。

这是一个简单的代码


List<int> numbers = [
            1,
            2,
            3,
            4,
            5
          ];

...


Container(
  height: 200,
  child: ListWheelScrollView(
    controller: fixedExtentScrollController,
    physics: FixedExtentScrollPhysics(),
    children: numbers.map((month) {
      return Card(
          child: GestureDetector(
            onTap: () {
              print(123);
            },
            child: Row(
              children: <Widget>[
                Expanded(
                    child: Padding(
                      padding: const EdgeInsets.all(8.0),
                      child: Text(
                        month.toString(),
                        style: TextStyle(fontSize: 18.0),
                      ),
                    )),
              ],
            ),
          ));
    }).toList(),
    itemExtent: 60.0,
  ),
)

这段代码有问题吗?我很确定这样的事情会在一个ListView或其他滚动小部件上工作。

标签: dartflutter

解决方案


我解决了这个问题。我希望是有帮助的。

  1. 在 State 类中创建一个 int 变量。

类 _MenuWheelState 扩展状态 { int _vIndiceWheel;

  1. 在 ListWheelScrollView 的函数 onSelectedItemChanged 中设置变量:

    onSelectedItemChanged: (ValueChanged) { setState(() { _vIndiceWheel = ValueChanged; }); },

  2. 创建一个 GestureDetecture 并将 ListWheelScrollView 放在里面:

    GestureDetector(孩子:ListWheelScrollView(...

  3. 在 GestureDetecture 创建 onTap 函数,如下代码:

    // 这是必要的 if (_vIndiceWheel == null) { _vIndiceWheel = 0; }

    switch (_vIndiceWheel) { case 0: { Navigator.push( context, MaterialPageRoute( builder: (context) { return YourSecondScreen(); }, ...


推荐阅读