У меня есть приложение, которое использует навигационную панель, но не должно отображать панель на главной странице. В настоящее время он настроен таким образом, чтобы при переходе пользователя домой он удалял кнопку с гамбургером и не давал пользователю смахнуть ящик. Тем не менее, пользователь все еще может подделать его, нажав кнопку «Назад», когда навигационный ящик наполовину выдвинут. Я не могу найти способ справиться с этим делом. IsDrawerOpen () оценивается как ложное, когда секция выдвинута наполовину, и я не могу .pop () вывести ее из стека, так как наполовину расширенная секция фактически не находится в стеке. Каков наилучший способ остановить это поведение?
Спасибо,
void _toggleNavDrawerBtn(String route) {
try {
setState(() {
if (route == "/") {
_showNavDrawerBtn = false;
drawerEdgeDragWidth = 0;
} else {
_showNavDrawerBtn = true;
drawerEdgeDragWidth = 40;
}
});
} catch (Exception) {}
}
Future<bool> _onWillPop() async {
if (_scaffoldKey.currentState.isDrawerOpen) {
_toggleNavDrawer();
} else {
bool isRoot = false;
_navigatorKey.currentState.popUntil((route) {
if (route.settings.name == "/") {
isRoot = true;
}
return true;
});
if (isRoot) {
return (await showDialog(
context: context,
builder: (context) => new AlertDialog(
content: new Text('Are you sure you want to exit?'),
actions: <Widget>[
new FlatButton(
onPressed: () => Navigator.of(context).pop(false),
child: new Text('No'),
),
new FlatButton(
onPressed: () => Navigator.of(context).pop(true),
child: new Text('Yes'),
),
],
),
)) ??
false;
} else {
_navigatorKey.currentState.pop();
}
}
}