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,
    ));
  }
}
Другие вопросы по тегам