Нижняя панель навигации Flutter с PageView - PullRequest
0 голосов
/ 17 апреля 2020

Я хочу построить нижнюю панель навигации с просмотром страницы. Это будет 3 страницы, и вы можете переходить влево или вправо. Я могу скользить, но цвет выбранных элементов моей панели навигации не меняется. Вы можете мне помочь?

class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
int _selectedIndex = 0;
final PageController _pageController = PageController();

@override
Widget build(BuildContext context) {
return Scaffold(
  bottomNavigationBar: BottomNavigationBar(
    items: [
      BottomNavigationBarItem(
          icon: Icon(Icons.portrait), title: Text('Profile')),
      BottomNavigationBarItem(icon: Icon(Icons.home), title: Text('Home')),
      BottomNavigationBarItem(
          icon: Icon(Icons.shopping_cart), title: Text('Shop'))
    ],
    onTap: _onTappedBar,
    selectedItemColor: Colors.orange,
    currentIndex: _selectedIndex,
  ),
  body: PageView(
    controller: _pageController,
    children: <Widget>[
      ProfilePage(),
      HomeTables(),
      ShoppingPage(),
    ],
  ),
);
}

void _onTappedBar(int value) {
setState(() {
  _selectedIndex = value;
});
_pageController.jumpToPage(value);
}
}

Ответы [ 2 ]

0 голосов
/ 17 апреля 2020

Просто добавьте onPageChanged свойство PageView и присвойте pageIndex свойству _selectedIndex, затем перезагрузите виджет, используя метод setState().

onPageChanged - Вызывается, когда изменяется страница в центре области просмотра.

PageView(
  ....
  onPageChanged: (pageIndex) {
    setState(() {
      _selectedIndex = pageIndex;
    });
  },
  ...
)
0 голосов
/ 17 апреля 2020

Вам просто нужно использовать onPageChanged свойство PageView, чтобы поймать номер текущей страницы.

PageView(
        controller: _pageController,
        children: <Widget>[
          ProfilePage(),
          HomeTables(),
          ShoppingPage(),
        ],
        onPageChanged: (page) {
          setState(() {
            _selectedIndex = page;
          });
        },
    );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...