Как программно открыть и закрыть ящик с помощью клавиш во Flutter? - PullRequest
0 голосов
/ 24 февраля 2020

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

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

enter image description here

На моей странице карты у меня есть

class _TheMapState extends State<TheMap> with WidgetsBindingObserver {
  GlobalKey<ScaffoldState> _drawerKey = GlobalKey();
  ...
  ...

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

Здесь я добавил ключ в ящик.

Widget mapDrawer() {
    return Drawer(
      key: _drawerKey,
      ...
      ...

Вот мой код значка , который находится в отдельном файле.

Widget _buildShowHideDrawerIcon() {
    return Container(
      child: Opacity(
        opacity: 0.60,
        child: Container(
          padding: EdgeInsets.all(7.0),
          decoration: BoxDecoration(
            color: Colors.white,
            //border: Border.all(color: Colors.black12, width: 1.0),
            boxShadow: [
              BoxShadow(
                color: Colors.black,
                offset: Offset(0.0, 0.0),
                blurRadius: 3.0,
              ),
            ],
          ),
          child: InkWell(
            onTap: () {
              print("SHOW/HIDE DRAWER ICON PRESSED");
              setState(() {
              _drawerKey.currentState.openDrawer();
              });
            },
            child: Icon(
              Icons.swap_horiz,
              color: Colors.black87,
              size: 24.0,
              semanticLabel: 'Show ,or hide sliding drawer',
            ),
          ),
        ),
      ),
    );
  }

Буду признателен за любую помощь в этом.

1 Ответ

0 голосов
/ 24 февраля 2020

Назначьте ключ для Scaffold, а не Drawer

  Scaffold(
    key: _drawerKey,
    drawer: Drawer(),

...