Есть ли способ определить, есть ли открытый ящик?

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

Я мог обрабатывать события определенного ящика напрямую и самостоятельно управлять состоянием. Однако в моем приложении есть несколько ящиков, которые мне нужно отслеживать, и это требует много работы. Есть ли глобальное место, где я могу проверить, открыт ли ящик (или модальное диалоговое окно) в любом месте приложения?

2 ответа

Решение

Обе showModalBottomSheet и модальные диалоги приостанавливают путь к Navigator. Таким образом можно проверить черезModalRoute.of(context)?.isCurrent != true находится ли другой маршрут (или диалог) перед текущим маршрутом.

К сожалению, открытый Drawer из Scaffoldэто не маршрут. Однако не обязательно иметь ключ на эшафоте, но его можно проверить черезScaffold.of(context).isDrawerOpen если следующий родитель Drawer открыт.

Объединив два состояния, я могу проверить, следует ли приостанавливать анимацию.

Да, есть способ узнать, открыта ли панель навигации или нет

1. Объявить GlobalKey

  GlobalKey<ScaffoldState> _scaffoldKey = GlobalKey<ScaffoldState>();

2. Назначьте ключ виджету Scaffold Widget

 return Scaffold(
      key: _scaffoldKey,

3. Используется везде, где вы хотите узнать статус ящика.

_scaffoldKey.currentState.isDrawerOpen   // This return bool value True-Open, False-Close
Другие вопросы по тегам