导航和路由颤振

时间:2019-08-08 18:04:09

标签: android ios flutter dart flutter-navigation

我刚刚开始颤抖,试图建立一个底部的导航栏,可在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;
    });
  }
}

1 个答案:

答案 0 :(得分:1)

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

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

如果您替换成children,这样就可以正常工作

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