导航和路由 Flutter

Navigation & Routing Flutter

我刚开始使用 flutter 并尝试构建一个在 4 个页面之间导航的底部导航栏:

'.../pages/home.dart';
'.../pages/history.dart';
'.../pages/search.dart';
'.../pages/bookmarks.dart';

启动应用程序时,主页应始终作为主屏幕显示。 (很明显!!)

我根据一些文档构建了导航栏。 导航栏似乎没有问题,但问题是

我不知道在哪里以及如何实现其余的导航和选项卡切换逻辑

这是我的main_screen.dart

class _MainScreenState extends State<MainScreen> {
  PageController _pageController;
  int _page = 0;
  @override 
  Widget build(BuildContext context) {
    return Scaffold( 
      body: PageView( 
        physics: NeverScrollableScrollPhysics(),
        controller: _pageController,
        onPageChanged: onPageChanged,
        children: List.generate(4, (index) => Home()),
      ),
      bottomNavigationBar: Theme(
        data: Theme.of(context).copyWith(
          canvasColor: Theme.of(context).primaryColor,
          primaryColor: Theme.of(context).accentColor,
          textTheme: Theme.of(context).textTheme.copyWith(caption: TextStyle(color: Colors.grey[400]),),
        ),
        child: BottomNavigationBar( 
          type: BottomNavigationBarType.fixed,
          items: <BottomNavigationBarItem>[
            BottomNavigationBarItem(
              icon: Icon(
                Feather.getIconData("home"),
              ),
              title: Container(height: 0.0),
            ),
            BottomNavigationBarItem(
              icon: Icon(
                Feather.getIconData("file"),
              ),
              title: Container(height: 0.0),
            ),
            BottomNavigationBarItem(
              icon: Icon(
                Feather.getIconData("search"),
              ),
              title: Container(height: 0.0),
            ),
            BottomNavigationBarItem(
              icon: Icon(
                Feather.getIconData("bookmark"),
              ),
              title: Container(height: 0.0),
            ),
          ],
          onTap: navigationTapped,
          currentIndex: _page,
        ),
      ),
    );
  }

  void navigationTapped(int page){
    _pageController.jumpToPage(page);
  }
  @override 
  void initState(){
    super.initState();
    _pageController = PageController(initialPage: 0);
  }
  @override 
  void dispose() {
    super.dispose();
    _pageController.dispose();
  }
  void onPageChanged(int page){
    setState(() {
      this._page = page;
    });
  }
}

因此,在您的 PageView 中,您列出了 children 这些页面应该与您的选项卡相对应。

目前您的 Home 小部件列出了 4 次,当您单击选项卡时,这显然不会显示任何差异。

如果你像这样替换你的 children 它应该可以正常工作

children: [Home(), History(), Search(), Bookmarks()]