1. AbsorbPointer. Он блокирует взаимодействия (тапания, жесты) для своего потомка полностью, когда absorbing is true.
Use case: запретить двойные тапы на кнопке во время состояния загрузки.
AbsorbbPointer(
absorbing: isLoading,
child: isLoadingButton(
child: ElevatedButton(
onPressed: () { /* submit */ },
child: Text("Submit"),
),
),
)
Позволяет UI оставаться видимым и интерактивным для анимаций, но останавливает ввод пользователя.
2. IgnorePointer. Отключает жесты, но не блокирует layout hit testing.
Use case: чтобы UI выглядел «активным», но не реагировал на пользователя.
IgnorePointer(
ignoring: isReadOnly,
child: Slider(
value: sliderValue,
onChanged: (_) {},
),
)
Подойдет, чтобы временно отключить взаимодействие без изменения визуального
layout и footprint виджета.AbsorbPointer не пропускает какие-либо действия под собой, а IgnorePointer блокирует только взаимодействие именно с ним.
3. Offstage. Убирает виджет из рендеринга/layout'а, но оставляет его в дереве виджетов.
Use case: пре-билдить сложные или дорогие части UI (табы, экраны), но пока не показывать их.
Offstage(
offstage: !showSettings,
child: SettingsPanel(),
)
Почему помогает: скрытый виджет остается живым (state, controllers, animations) без влияния на видимый
layout и без перестроек каждый раз.
