Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
682 of 1024 menu
◀ ▶

Виджет IgnorePointer

Виджет IgnorePointer оборачивает child и при ignoring: true не передаёт нажатия вниз по дереву. События проходят к виджетам под IgnorePointer. Чтобы забрать нажатия себе, используют AbsorbPointer.

Синтаксис

IgnorePointer( ignoring: true, child: child, )

Параметры

Параметр Описание
ignoring Если true, дочерние виджеты не получают события указателя.
child Дочерний виджет, для которого отключают или включают события.

Пример

Давайте заблокируем кнопку поверх другой:

import 'package:flutter/material.dart'; class BlockedButton extends StatefulWidget { const BlockedButton({super.key}); @override State<BlockedButton> createState() => _BlockedButtonState(); } class _BlockedButtonState extends State<BlockedButton> { var label = 'abcde'; @override Widget build(BuildContext context) { return Stack( alignment: Alignment.center, children: [ ElevatedButton( onPressed: () { setState(() { label = '12345'; }); }, child: const Text('bottom'), ), IgnorePointer( ignoring: true, child: ElevatedButton( onPressed: () {}, child: const Text('top'), ), ), Text(label), ], ); } } void main() { runApp( MaterialApp( home: Scaffold( body: Center( child: BlockedButton(), ), ), ), ); }

На экране верхняя кнопка не ловит нажатия; клик проходит к нижней и меняет подпись на '12345'.

Пример

Давайте включим блокировку переключателем:

import 'package:flutter/material.dart'; class ToggleIgnore extends StatefulWidget { const ToggleIgnore({super.key}); @override State<ToggleIgnore> createState() => _ToggleIgnoreState(); } class _ToggleIgnoreState extends State<ToggleIgnore> { var blocked = true; var taps = 0; @override Widget build(BuildContext context) { return Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Switch( value: blocked, onChanged: (value) { setState(() { blocked = value; }); }, ), IgnorePointer( ignoring: blocked, child: ElevatedButton( onPressed: () { setState(() { taps += 1; }); }, child: Text('taps: $taps'), ), ), ], ); } } void main() { runApp( MaterialApp( home: Scaffold( body: ToggleIgnore(), ), ), ); }

На экране переключатель; пока он включён, кнопка не реагирует, счётчик taps не растёт.

Смотрите также

  • виджет AbsorbPointer,
    который забирает нажатия и не отдаёт ниже
  • виджет GestureDetector,
    который ловит жесты, когда ignoring выключен
  • виджет Listener,
    который слушает PointerEvent
  • перечисление HitTestBehavior,
    которое настраивает попадание указателя
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить