Как отключить Cupertinopicker во флаттере?

У меня есть 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)),

1 ответ

Вы можете использовать AbsorbPointer для включения / отключения событий касания для любого виджета. Согласно документации

Если поглощение истинно, этот виджет предотвращает получение своим поддеревом событий указателя, завершая проверку попадания на самом себе. Он по-прежнему занимает место во время макета и раскрашивает свой дочерний элемент как обычно. Он просто предотвращает то, что его потомки становятся целью обнаруженных событий, потому что он возвращает true из RenderBox.hitTest.

В вашем случае оберните CupertinoPicker AbsorbPointer и используйте 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)),
);

Вы можете

Другие вопросы по тегам