1

我有一个 CupertinoPicker,在某些情况下我必须禁用 CupertinoPicker。

检查了 CupertinoPicker 类,并没有在其中找到任何禁用属性。

如果无法禁用,我可以停止滚动吗?

CupertinoPicker(
          backgroundColor: null,
          itemExtent: PICKER_EXTENT,
          useMagnifier: true,
          looping: true,
          onSelectedItemChanged: (int index) {
            print('selected index $index');
          },
          children: List<Widget>.generate(dataList.length, (int index) {
            return Center(
              child: Text(dataList[index]),
            );
          }),
          scrollController:
              FixedExtentScrollController(initialItem: selectedIndex)),
4

1 回答 1

2

您可以使用AbsorbPointer启用/禁用任何小部件的触摸事件。根据文档

当吸收为真时,此小部件通过终止自身的命中测试来防止其子树接收指针事件。它在布局期间仍然会占用空间并像往常一样绘制它的孩子。它只是防止其子代成为定位事件的目标,因为它从 RenderBox.hitTest 返回 true。

在您的情况下,使用 AbsorbPointer 包装 CupertinoPicker 并使用该absorbing属性来启用/禁用您的触摸事件CupertinoPicker

 AbsorbPointer(
  absorbing: true,
  child: CupertinoPicker(
      backgroundColor: null,
      itemExtent: 100.0,
      useMagnifier: true,
      looping: true,
      onSelectedItemChanged: (int index) {
        print('selected index $index');
      },
      children: List<Widget>.generate(dataList.length, (int index) {
        return Center(
          child: Text(dataList[index]),
        );
      }),
      scrollController:
          FixedExtentScrollController(initialItem: selectedIndex)),
);

你可以

于 2020-02-24T06:26:32.640 回答