颤动底部导航,其中一个页面有选项卡

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了颤动底部导航,其中一个页面有选项卡相关的知识,希望对你有一定的参考价值。

我想创建一个带有底部导航栏的脚手架,以及一个始终显示当前页面标题的应用栏。当我更改底栏选项时,内容会发生明显变化。使用经典的NavigationBar结构,这一切都很好。但问题开始时,内容页面上应该有选项卡。我在父母Scaffold中创建了我的appbar。反正有没有向父窗口小部件appBar添加标签?

我的应用栏+底部导航栏页面:

class MainPage extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return _MainPageState();
  }
}
class _MainPageState extends State<MainPage> {

  int _currentPageIndex;
  List<Widget> _pages = List();

  Widget _getCurrentPage() => _pages[_currentPageIndex];

  @override
  void initState() {
    setState(() {
      _currentPageIndex = 0;

      _pages.add(BlocProvider(bloc: AgendaBloc(), child: AgendaPage()));
      _pages.add(SpeakersPage());
      _pages.add(MenuPage());
    });
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: MyAppBar( title: 'Agenda'),
      body: _getCurrentPage(),
      bottomNavigationBar: BottomNavigationBar(
        currentIndex: _currentPageIndex,
        onTap: (index){
          setState(() {
            _currentPageIndex = index;
          });
        },
        items: [
          BottomNavigationBarItem(
            icon: Icon(Icons.content_paste),
            title: Text('Agenda'),
          ),
          BottomNavigationBarItem(
            icon: Icon(Icons.group),
            title: Text('Speakers'),
          ),
          BottomNavigationBarItem(
            icon: Icon(Icons.menu),
            title: Text('Menu'),
          ),
        ],
      ),
    );
  }
}

现在让我们说我希望我的AgendaPage小部件在视图顶部显示选项卡。有没有简单,非hacky方式来做到这一点?

期望的效果:Tabs page

No Tabs page

答案

您可以使用嵌套的Scaffold小部件。这适用于Flutter 1.1.8:

// This is the outer Scaffold. No AppBar here
Scaffold(
  // Workaround for https://github.com/flutter/flutter/issues/7036
  resizeToAvoidBottomPadding: false, 
  body: _getCurrentPage(),  // AppBar comes from the Scaffold of the current page 
  bottomNavigationBar: BottomNavigationBar(
    // ...
  )
)
另一答案

据我所知你不能,但我设法通过在AppBar导航的每个页面添加一个单独的bottomNavigationBar来解决这个问题:

为您的每个_pages提供一个单独的应用程序栏,并从您的build方法中删除主要的。

以上是关于颤动底部导航,其中一个页面有选项卡的主要内容,如果未能解决你的问题,请参考以下文章

颤动底部导航,其中一页有标签

使用底部应用栏标签导航 - 颤动

使用底部导航栏导航回页面时颤动通过底部导航栏选择的索引

底部导航视图中的每个选项卡单击都会重新加载片段

页面浏览量颤动如何跳转到另一个页面

每次当前选项卡在 TabBar 颤动中更改时,如何将新页面添加到导航器堆栈?