Как проверить видимость виджета Flutter, даже если он закрыт другим

#flutter #dart #flutter-layout

#flutter #dart #flutter-layout

Вопрос:

Я пытаюсь найти способ проверить видимость виджета Flutter, когда он либо вне экрана, либо когда он скрыт другим, например, выдвижным ящиком, диалоговым окном или нижней таблицей.

visibility_detector помогает проверить, отображается ли он на экране или нет, но не работает со вторым вариантом использования (известное ограничение).

Есть ли API нижнего рычага, который я могу использовать, чтобы проверить, действительно ли виджет виден пользователю?

Мой вариант использования: я добавляю виджет в оверлей, когда происходит что-то внешнее (аналогично всплывающей подсказке, но не при длительном нажатии). Если пользователь откроет, например, ящик, виджет появится сверху. Я хочу обнаружить, что дочерний элемент не виден, и отложить или отменить действие.

Ответ №1:

Я понимаю вашу проблему?

  • У вас есть виджет, который вы хотите всегда быть на вершине?
  • Вы хотите, чтобы пользователь сначала взаимодействовал с этим виджетом, прежде чем выполнять другие действия?

Используйте шаблоны проектирования, чтобы упростить кодирование, ваши пользователи будут вам благодарны.

Вы можете отобразить диалоговое окно поверх других виджетов с функциями showGeneralDialog или showDialog . Поскольку диалоговые окна являются шаблоном проектирования, используемым во многих приложениях, пользователи уже будут знать, как их использовать.

Определите поведение приложения с явным состоянием.

Слишком сложно определить поведение приложения на основе отображаемого пользовательского интерфейса, не все устройства имеют одинаковый размер и форму.Это означает, что вы должны попытаться написать переменную, которая описывает вашу ситуацию, а затем написать код, необходимый для корректного определения значения этой переменной. Похоже, вам нужна переменная like bool overlayIsShowing .

Комментарии:

1. Нет, я пытаюсь сделать что-то вроде всплывающего окна

2. Понятно. Слово Flutter для этой концепции — всплывающая подсказка . Всплывающие подсказки поддерживаются и встроены, потому что они являются частью Material Design. Каждый раз, когда ваш пользовательский интерфейс отличается от Material Design, ожидайте проблем.

3. Я нашел пакет, который кажется похожим на то, что вам нужно. pub.dev/packages/simple_tooltip

4. Всплывающая подсказка Flutter предназначена только для отображения метки при длительном нажатии или наведении курсора мыши. Виджет simple_tooltip — это не совсем то, что я ищу по стилю, и исходная проблема, которую я опубликовал выше, все еще применяется.