Определить частичное открытие ящика - PullRequest
0 голосов
/ 14 февраля 2020

У меня есть приложение, которое использует навигационную панель, но не должно отображать панель на главной странице. В настоящее время он настроен таким образом, чтобы при переходе пользователя домой он удалял кнопку с гамбургером и не давал пользователю смахнуть ящик. Тем не менее, пользователь все еще может подделать его, нажав кнопку «Назад», когда навигационный ящик наполовину выдвинут. Я не могу найти способ справиться с этим делом. 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();
  }
}

}

...