Flutter:使用导航器推送到新屏幕时保留 BottomNavigationBar

2024-01-22

在iOS中,我们有一个UITabBar控制器 https://developer.apple.com/documentation/uikit/uitabbarcontroller当我们推送到新的 ViewController 时,它会永久保留在屏幕底部。

在 Flutter 中,我们有一个 Scaffold 的底部NavigationBar。然而,与 iOS 不同的是,当我们Navigator.push到了新屏幕,这个底部NavigationBar就消失了。

在我的应用程序中,我想满足这个要求:主屏幕有一个bottomNavigationBar有 2 件物品(a & b) 呈现屏幕A & B。默认情况下,屏幕A被展示。内屏A,有一个按钮。点击那个按钮,Navigator.push向屏幕C。现在在屏幕上C,我们仍然可以看到bottomNavigationBar。点击项目b,我转到屏幕B。现在在屏幕上B, 点击项目a in the bottomNavigationBar,我回到屏幕C (not A, A目前低于C在导航层次结构中)。

我怎样才能做到这一点?多谢你们。

编辑:我添加了一些用于演示的图片:

屏幕AScreen A https://i.stack.imgur.com/TLckw.png

Tap Go to C按钮,推至屏幕 CScreen C https://i.stack.imgur.com/5MpU5.png

Tap Right底部导航栏中的项目,转到屏幕 BScreen B https://i.stack.imgur.com/gtqQq.png


截屏:


初始点:

void main() => runApp(MaterialApp(home: HomePage()));

HomePage [BottomNavigationBar + Page1]

class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      bottomNavigationBar: BottomNavigationBar(
        backgroundColor: Colors.orange,
        items: [
          BottomNavigationBarItem(icon: Icon(Icons.call), label: 'Call'),
          BottomNavigationBarItem(icon: Icon(Icons.message), label: 'Message'),
        ],
      ),
      body: Navigator(
        onGenerateRoute: (settings) {
          Widget page = Page1();
          if (settings.name == 'page2') page = Page2();
          return MaterialPageRoute(builder: (_) => page);
        },
      ),
    );
  }
}

第一页:

class Page1 extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Page1')),
      body: Center(
        child: RaisedButton(
          onPressed: () => Navigator.pushNamed(context, 'page2'),
          child: Text('Go to Page2'),
        ),
      ),
    );
  }
}

第二页:

class Page2 extends StatelessWidget {
  @override
  Widget build(BuildContext context) => Scaffold(appBar: AppBar(title: Text('Page2')));
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flutter:使用导航器推送到新屏幕时保留 BottomNavigationBar 的相关文章

随机推荐