我实现了一个应用程序,它使用了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,但是肯定有更简单的方法
1条答案
按热度按时间xqkwcwgp1#
这是很明显的行为,因为当您呼叫Navigator. push时,它会立即将UI推入新的画面,而您的bottomAppBar在此画面中无法使用。
这里有一篇关于你想要什么的文章:Multiple Navigators with BottomNavigationBar