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

Виджет AbsorbPointer

Виджет AbsorbPointer при absorbing: true блокирует child и виджеты под ним. Нажатия не проходят ни к child, ни сквозь AbsorbPointer вниз. Если нужно пропустить событие ниже по дереву, берут IgnorePointer.

Синтаксис

AbsorbPointer( absorbing: true, child: child, )

Параметры

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

Пример

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

import 'package:flutter/material.dart'; class LoadingShield extends StatefulWidget { const LoadingShield({super.key}); @override State<LoadingShield> createState() => _LoadingShieldState(); } class _LoadingShieldState extends State<LoadingShield> { var busy = true; var label = 'abcde'; @override Widget build(BuildContext context) { return Stack( children: [ ElevatedButton( onPressed: () { setState(() { label = '12345'; }); }, child: Text(label), ), if (busy) const AbsorbPointer( absorbing: true, child: ModalBarrier(dismissible: false), ), if (busy) const Center( child: CircularProgressIndicator(), ), ], ); } } void main() { runApp( MaterialApp( home: Scaffold( body: Center( child: LoadingShield(), ), ), ), ); }

На экране кнопка под полупрозрачной пеленой; нажатия поглощает AbsorbPointer, текст не меняется.

Пример

Даже child внутри AbsorbPointer не получит onTap:

import 'package:flutter/material.dart'; class AbsorbChild extends StatefulWidget { const AbsorbChild({super.key}); @override State<AbsorbChild> createState() => _AbsorbChildState(); } class _AbsorbChildState extends State<AbsorbChild> { var label = '12345'; @override Widget build(BuildContext context) { return AbsorbPointer( absorbing: true, child: GestureDetector( onTap: () { setState(() { label = 'abcde'; }); }, child: Text(label), ), ); } } void main() { runApp( MaterialApp( home: Scaffold( body: Center( child: AbsorbChild(), ), ), ), ); }

На экране текст '12345'; нажатия не доходят до GestureDetector внутри AbsorbPointer.

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

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