Как скрыть панель навигации после перехода на другую страницу (трепетание)? - PullRequest
2 голосов
/ 21 октября 2019

На главной странице я вызываю виджет для своего тела main.dart base на панели навигации, на главной странице он имеет список изображений, если я нажимаю на одно из изображений, он показывает мне детали. проблема заключается в том, что навигационная панель на странице сведений все еще отображается. Как скрыть панель навигации?

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 ]

4 голосов
/ 21 октября 2019

_widgetOptions, как и Breakfast, не должно заключать Scaffold в MaterialApp.

MaterialApp должно быть в корне вашего приложения.

2 голосов
/ 21 октября 2019

Вы не делаете переход страницы в вашем действии нажатия. Если вы просто измените основную часть вашего основного экрана, другие части, конечно, все еще видны. На самом деле вы не должны помещать совершенно новые леса в другое тело лесов. И точно не Виджет MaterialApp, как кто-то еще уже отметил.

Вам нужно исправить несколько вещей:

  • использовать MaterialApp только в методе build () _NavState над Scaffold

  • удалите MaterialApp и виджет Scaffold из класса завтрака

  • используйте контейнер перед вашим строителем Gridview в классе завтрака. Помните, что при замене тела Scaffolds вы хотите иметь только виджеты более низкого уровня, такие как контейнеры, а не целые строительные блоки, как другие Scaffolds.

  • сделать bottomNavigationBar видимым в зависимости от состояния вашего_NavState

как:

bottomNavigationBar: _selectedIndex == 0 ? 
   Container(
    color: Colors.grey[100],
    child: DefaultTabController(...) 
   : null
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...