移至另一页面后如何隐藏导航栏(颤振)?

时间:2019-10-21 03:06:02

标签: flutter state navigationbar

在主页中,我基于导航栏选项将小部件调用到我的主体main.dart,在主页中,它具有图像列表,如果单击图像之一,它将向我显示详细信息。问题是详细信息页面中的导航栏仍然显示。如何隐藏导航栏?

Main.dart

class MyApp extends StatefulWidget {
  @override
  _NavState createState() => _NavState();
}

class _NavState extends State {
  int _selectedIndex = 0;

  final _widgetOptions = [
    Breakfast(),
    Desert(),
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: _widgetOptions.elementAt(_selectedIndex),
      bottomNavigationBar: Container(
        color: Colors.grey[100],
        child: DefaultTabController(
          length: 2,
          child: TabBar(
            indicatorColor: Colors.grey,
            labelColor: Colors.blueAccent,
            unselectedLabelColor: Colors.grey,
            onTap: _onItemTapped,
            tabs: [
              Tab(
                text: 'Breakfast',
              ),
              Tab(
                text: 'Dessert',
              ),
            ],
          ),
        ),
      ),
    );
  }

  void _onItemTapped(int index) {
    setState(() {
      _selectedIndex = index;
    });
  }
}

我调用到主页的小部件之一

class Breakfast extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final title = "Fatoni's Resto Menu";
    return MaterialApp(
      title: title,
      home: Scaffold(
        appBar: AppBar(
          title: Text(title),
          actions: <Widget>[
            IconButton(
              icon: Icon(Icons.settings),
              onPressed: () {},
            )
          ],
        ),
        body: GridView.builder(
          itemCount: DataBreakfast.listViewData.length,
          gridDelegate:
              SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2),
          itemBuilder: (context, index) {
            return Column(
              children: <Widget>[
                Expanded(
                  child: Card(
                    margin: EdgeInsets.all(10.0),
                    child: InkWell(
                      onTap: () {
                        Navigator.push(
                          context,
                          MaterialPageRoute(
                            builder: (context) {
                              return DetailScreen(
                                  name: DataBreakfast.listViewData[index],
                                  image: DataBreakfast.listViewDataImage[index],
                                  info: DataBreakfast.listViewDataInfo[index],
                                  index: index);
                            },
                          ),
                        );
                      },
                    ),
                  ),
                )
              ],
            );
          },
        ),
      ),
    );
  }
}

2 个答案:

答案 0 :(得分:4)

_widgetOptionsBreakfast一样,不应将ScaffoldMaterialApp包装。

MaterialApp应该在您应用的根目录附近。

答案 1 :(得分:2)

您无需在点击操作中进行页面转换。如果仅更改主屏幕的主体,其他部分当然仍然可见。实际上,您不应将全新的脚手架放到另一个脚手架中。并且可以肯定的是,MaterialApp Widget并非像其他人已经提到的那样。

您需要纠正一些问题:

  • 仅在Scaffold上方的_NavState的build()方法中使用MaterialApp

  • 从早餐类中删除MaterialApp和Scaffold小部件

  • 在早餐课中的Gridview构建器之前使用容器。记住,当替换一个脚手架实体时,您只想在其中放置容器之类的较低级别的小部件,而不是像其他脚手架那样在整个构建基块。

  • 根据您的_NavState的状态使bottomNavigationBar可见

喜欢:

bottomNavigationBar: _selectedIndex == 0 ? 
   Container(
    color: Colors.grey[100],
    child: DefaultTabController(...) 
   : null