Есть ли способ определить, есть ли открытый ящик?
У меня есть приложение 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