Flutter как отключить анимацию слайдов в BottomNavigationBar
Я пытаюсь создать BottomNavigationBar в режиме флаттера, но хочу отключить анимацию слайдов между страницами. Если я перейду с первой вкладки на третью, я хочу, чтобы она открывала третью вкладку напрямую, а не скользила через вторую вкладку, а затем на третью.
Вот мой код:
class MyApp3 extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return _MyAppState3();
}
}
class _MyAppState3 extends State<MyApp3> {
@override
PageController _pageController;
@override
void initState() {
super.initState();
_pageController = PageController(initialPage: 0);
}
@override
Widget build(BuildContext context) {
var pages = [FirstTab(), SecondTab(), ThirdTab()];
var pageView = PageView(
controller: _pageController,
physics: NeverScrollableScrollPhysics(),
children: pages,
);
var bottomNav = BottomNavigationBar(
onTap: (tabIndex) {
_pageController.jumpToPage(tabIndex);
},
items: [
BottomNavigationBarItem(icon: Icon(Icons.home), label: "Start"),
BottomNavigationBarItem(
icon: Icon(Icons.camera_enhance), label: "Second"),
BottomNavigationBarItem(icon: Icon(Icons.offline_pin), label: "Home"),
],
);
return MaterialApp(
home: Scaffold(
body: pageView,
bottomNavigationBar: bottomNav,
));
}
}
С этим кодом все работает так, как я хочу, но BottomNavigationBarItem не меняется при изменении страницы. Всегда это выглядит так:
Что я могу сделать, чтобы изменить выбор BottomNavigationBarItem?
1 ответ
Решение
Попробуй это.
class MyApp3 extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return _MyAppState3();
}
}
class _MyAppState3 extends State<MyApp3> {
@override
PageController _pageController;
@override
void initState() {
super.initState();
_pageController = PageController(initialPage: 0);
}
int _currentIndex = 0;
@override
Widget build(BuildContext context) {
var pages = [FirstTab(), SecondTab(), ThirdTab()];
var pageView = PageView(
controller: _pageController,
physics: NeverScrollableScrollPhysics(),
children: pages,
);
var bottomNav = BottomNavigationBar(
onTap: (tabIndex) {
setState((){_currentIndex = tabIndex;});
_pageController.jumpToPage(tabIndex);
},
currentIndex: _currentIndex,
items: [
BottomNavigationBarItem(icon: Icon(Icons.home), label: "Start"),
BottomNavigationBarItem(
icon: Icon(Icons.camera_enhance), label: "Second"),
BottomNavigationBarItem(icon: Icon(Icons.offline_pin), label: "Home"),
],
);
return MaterialApp(
home: Scaffold(
body: pageView,
bottomNavigationBar: bottomNav,
));
}
}