#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 и прикрепленная в качестве ключа нижней панели навигации