使用Navigator时,FlutterGNav消失,pushNamed()

5jvtdoz2  于 2022-11-30  发布在  Flutter
关注(0)|答案(1)|浏览(147)

我实现了一个应用程序,它使用了google_nav_bar. dart中的GNav。大多数功能都运行良好,我真的很喜欢它,我可以通过单击导航栏的标签图标来手动切换页面。但是当我试图在代码中更改页面时(例如按钮按下或用户做了某个动作后)使用Navigator.pushNamed导航栏消失。我知道这是正常的BCS为什么导航栏应该留下来,但是我不知道如何管理这个。在互联网上没有那么多的例子。如果有人能帮助我就太好了!应用程序解释:用户扫描一本书的条形码,扫描后他会被重定向到应用页面,在那里用户可以找到对这本书的评论。我还希望在评论页面上有导航栏。这里是导航发生的简化代码,不同的屏幕只返回一个Scaffold,它们还没有实现:

class MyAppState extends State<MyApp> {
  @override
  void initState() {
    super.initState();
  }

  int _selectedIndex = 0;
  static final List<Widget> _pages = <Widget>[
    const ScannerScreen(),
    const AllReviewsScreen(),

  ];

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        home: Scaffold(
          appBar: AppBar(
            title: const Text('ReviewApp'),
          ),
          body: _pages.elementAt(_selectedIndex),
          bottomNavigationBar: Container(
            color: Colors.black,
            child: Padding(
              padding: const EdgeInsets.symmetric(horizontal: 8.0, vertical: 0),
              child: GNav(
                gap: 8,
                backgroundColor: Colors.black,
                color: Colors.white,
                activeColor: Colors.white,
                tabBackgroundColor: Colors.grey.shade800,
                padding: const EdgeInsets.all(12),
                tabs: const [
                  GButton(
                    icon: Icons.qr_code_scanner,
                    text: 'Scanner',
                  ),
                  GButton(
                    icon: Icons.reviews,
                    text: 'Alle Reviews',
                  ),
            
                ],
                selectedIndex: _selectedIndex,
                onTabChange: (index) {
                  setState(() {
                    _selectedIndex = index;
                  });
                },
              ),
            ),
          ),
        ),
        onGenerateRoute: (RouteSettings settings) {
          switch (settings.name) {
            case '/scanner':
              return FadeRoute(const ScannerScreen());
            case '/all_reviews':
              return FadeRoute(const AllReviewsScreen());

            default:
              return null;
          }
        });
  }
}

我尝试使用tabController,但是GoogleNavBar没有控制器,所以我认为它用另一种方式处理这个问题,但是我几乎没有在互联网上找到东西,在每个例子中,他们只使用navbar切换屏幕。当然,我可以在每个屏幕上实现navbar,但是肯定有更简单的方法

xqkwcwgp

xqkwcwgp1#

这是很明显的行为,因为当您呼叫Navigator. push时,它会立即将UI推入新的画面,而您的bottomAppBar在此画面中无法使用。
这里有一篇关于你想要什么的文章:Multiple Navigators with BottomNavigationBar

相关问题