Поднятая кнопка onTap, возвращающая значение null при новой сборке

#flutter #dart #flutter-layout

#flutter #dart #всплывающий макет

Вопрос:

В моем приложении flutter у меня есть виджет RaisedButton на первой странице моей нижней панели навигации. Эта страница содержит кнопку, которая должна перевести пользователя на четвертую и последнюю страницу приложения, которая также является четвертой страницей на нижней панели навигации (я знаю, это глупо, но требования заказчика таковы, каковы они есть). Это моя поднятая кнопка:

                 Padding(
                  padding: const EdgeInsets.only(top: 20),
                  child: SizedBox(
                    width: MediaQuery.of(context).size.width * 0.6,
                    height: MediaQuery.of(context).size.width * 0.15,
                    child: RaisedButton(
                        textColor: Colors.white,
                        color: Constants.secondaryYellow,
                        child: new AlignText(
                          alignmentDirection: Alignment.center,
                          fontSize: 22,
                          fontWeight: FontWeight.normal,
                          text: 'Go to Settings',
                          textColour: Constants.primaryWhite,
                        ),
                        onPressed: () {
                          navigationBar.onTap(3);
                        },
                        splashColor: Constants.secondaryLightBlue,
                        shape: RoundedRectangleBorder(
                            borderRadius: BorderRadius.circular(10.0))),
                  ),
                )
  

Клавиша BottomNavigationBar создается в виджете с отслеживанием состояния прямо над функцией сборки следующим образом

 final BottomNavigationBar navigationBar = navBarGlobalKey.currentWidget;
  

Если я перейду на другой экран, вернусь на домашнюю страницу и затем нажму кнопку, кнопка будет работать так, как задумано. Однако, если кнопка нажата первым, что я делаю в приложении, тогда функция onTap возвращает следующую ошибку в консоли

Средство получения ‘onTap’ было вызвано при null. Получатель: null Пытался вызвать: onTap

Вот моя нижняя панель навигации:

 BottomNavigationBar(
        key: navBarGlobalKey,
        onTap: onTapped,
        currentIndex: currentIndex,
        fixedColor: Constants.secondaryLightBlue,
        backgroundColor: Colors.white,
        type: BottomNavigationBarType.fixed,
        items: [
          BottomNavigationBarItem(
              icon: new Icon(Icons.dashboard),
              title: new Text('Page 1'),
              activeIcon: new Icon(
                Icons.dashboard,
                color: Constants.secondaryLightBlue,
              )),
          BottomNavigationBarItem(
              icon: new Icon(Icons.apps),
              title: new Text('Page 2'),
              activeIcon: new Icon(
                Icons.apps,
                color: Constants.secondaryLightBlue,
              )),
          BottomNavigationBarItem(
              icon: new Icon(Icons.people),
              title: new Text('Page 3'),
              activeIcon: new Icon(
                Icons.people,
                color: Constants.secondaryLightBlue,
              )),
          BottomNavigationBarItem(
              icon: new Icon(Icons.question_answer),
              title: new Text('Page 4'),
              activeIcon: new Icon(
                Icons.question_answer,
                color: Constants.secondaryLightBlue,
              )),
        ],
      )
  

Переменная NavigationBar, вызываемая в onTap, является глобальной переменной в main.dart и прикрепляется в качестве ключа BottomNavigationBar

 GlobalKey navBarGlobalKey = GlobalKey(debugLabel: 'bottomAppBar');

void main() {
  runApp(
    MaterialApp(
      theme: ThemeData(primaryColor: Color.fromRGBO(35, 40, 55, 1)),
      home: SampleApp(),
    ),
  );
}
  

Комментарии:

1. Итак, ошибка в том, что ваша переменная navigationBar равна null. Несмотря на весь опубликованный вами код, вы не убедили меня, почему он не будет равен null. Почему navigationBar не должно быть null? Пожалуйста, опубликуйте этот код.

2. Опубликуйте код, где navigationBar объявлен и где он используется.

3. что navigationBar это на самом деле, класс с методами или виджет? вы действительно должны опубликовать код, в котором он создается.

4. Обновил вопрос, это глобальная переменная, объявленная в main.dart и прикрепленная в качестве ключа нижней панели навигации