0

我使用底部导航栏并在底部添加了 3 个按钮。我正在用 setate 交换页面。这些按钮工作正常。但是,如果我在使用这些按钮调用的页面中调用另一个页面,BottomNavigationBar 就会消失。我已经研究过了,发现这个click me。使用Provider调用页面合乎逻辑吗?我认为它将每一页都保存在内存中,它不会消耗太多内存吗?

 import 'package:flutter/material.dart';

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  int selectedPage = 0;

  final _pageOptions = [
    HomeScreen(),
    InboxScreen(),
    SignInScreen()
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        backgroundColor: Colors.white,
        body: _pageOptions[selectedPage],
        bottomNavigationBar: BottomNavigationBar(
          items: [
            BottomNavigationBarItem(icon: Icon(Icons.home, size: 30), title: Text('Home')),
            BottomNavigationBarItem(icon: Icon(Icons.mail, size: 30), title: Text('Inbox')),
            BottomNavigationBarItem(icon: Icon(Icons.account_circle, size: 30), title: Text('Account')),
          ],
          selectedItemColor: Colors.green,
          elevation: 5.0,
          unselectedItemColor: Colors.green[900],
          currentIndex: selectedPage,
          backgroundColor: Colors.white,
          onTap: (index){
            setState(() {
              selectedPage = index;
            });
          },
        )
    );
  }
}

这是我的主页。如果我单击文本,底部导航栏会消失

class _HomePage extends State<HomePage> {
  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return Scaffold(appBar: AppBar(title: Text('Page2')),body:GestureDetector(
        onTap: () {
    
            Navigator.of(context).push(MaterialPageRoute(builder: (context) => NewScreen()));

        },
        child:Text('clik')));
  }
}

我想喜欢这个 我想要这个 但是我的代码运行这个 不是这个

4

1 回答 1

0

您发布的代码看起来非常好!
您的问题必须在其他地方,可能在其中一个小部件中

final _pageOptions = [
  HomeScreen(),
  InboxScreen(),
  SignInScreen()
];

您的问题可能有很多根本原因,您可以从确定哪个 Widget 使 bottomNavigationBar 消失开始。
一旦发现它,请确保您没有使用该方法Navigator.of(context).push,这可能是您的底部导航栏消失的原因之一。

如果您仍然卡住,请随时使用 Widget 的源代码更新您的问题,使栏消失,我会更新我的答案

编辑
正如我之前提到的,每当您调用该 Navigator.push(context, UserProfilePage);方法时,您都会用新的小部件替换以前的小部件。
由于您以前的小部件持有您的底部导航栏,这就是它消失的原因。

您在这里寻找的是,如何拥有一个持久的导航栏。
这里有两个有用的链接可以帮助您和其他有此需求的人,一个视频教程来了解如何实现它以及一篇写得很好的文章来完全理解它是如何工作的

于 2021-03-31T06:06:45.583 回答