Flutter 移动到另一页后如何隐藏导航栏(颤振)?

Flutter 移动到另一页后如何隐藏导航栏(颤振)?,flutter,state,navigationbar,Flutter,State,Navigationbar,在主页中,我调用widget到我的body main.dart基于导航栏选项,在主页中,它有一个图像列表,如果我单击其中一个图像,它会显示详细信息。问题是详细信息页面中的导航栏仍然显示。如何隐藏导航栏 主飞镖 class MyApp extends StatefulWidget { @override _NavState createState() => _NavState(); } class _NavState extends State { int _selectedI

在主页中,我调用widget到我的body 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);
                            },
                          ),
                        );
                      },
                    ),
                  ),
                )
              ],
            );
          },
        ),
      ),
    );
  }
}

班级早餐{
@凌驾
小部件构建(构建上下文){
最终标题=“法托尼的恢复菜单”;
返回材料PP(
标题:标题,,
家:脚手架(
appBar:appBar(
标题:文本(标题),
行动:[
图标按钮(
图标:图标(图标.设置),
按下:(){},
)
],
),
正文:GridView.builder(
itemCount:DataBreakfast.listViewData.length,
gridDelegate:
SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount:2),
itemBuilder:(上下文,索引){
返回列(
儿童:[
扩大(
孩子:卡片(
保证金:所有边缘套(10.0),
孩子:InkWell(
onTap:(){
导航器。推(
上下文
材料路线(
生成器:(上下文){
返回详细信息屏幕(
名称:DataBreakfast.listViewData[索引],
image:DataBreakfast.listViewDataImage[index],
信息:DataBreakfast.listViewDataInfo[索引],
索引:索引);
},
),
);
},
),
),
)
],
);
},
),
),
);
}
}

像早餐一样的
\u widgetOptions
不应该用
材料包裹
脚手架


MaterialApp
应该位于应用程序的根目录附近。

在点击操作中不进行页面转换。如果您只是更改主屏幕的主体,其他部分当然仍然可见。事实上,你不应该把一个全新的支架放进另一个支架体内。当然,也不是其他人已经提到的MaterialApp小部件

您需要纠正以下几点:

  • 仅在脚手架上方的_NavState的build()方法中使用MaterialApp

  • 从早餐类中删除MaterialApp和脚手架小部件

  • 在早餐课程中,在Gridview生成器之前使用容器。请记住,在替换脚手架主体时,您只希望在其中包含较低级别的小部件,如容器,而不是像其他脚手架那样的整个构建块

  • 根据您的导航状态,使底部导航栏可见

比如:


你的问题不太清楚。请把你的主要方法也写下来。早餐小部件中有material应用程序,但似乎从main调用了MyApp小部件。
bottomNavigationBar: _selectedIndex == 0 ? 
   Container(
    color: Colors.grey[100],
    child: DefaultTabController(...) 
   : null