问题描述
通过关注此线程,我无法将路由和底部导航栏 (How to use a named routes in a BottomNavigationBar in flutter?) 结合起来。
关于如何使这项工作有任何建议? 我正在尝试为一些定义的路由添加一个 BottomNavigationBar。 对于其余路线,不应存在 BottomNavigationBar。
void main() {
runApp(Og1AlarmApp());
}
class Og1AlarmApp extends StatelessWidget {
final Map<String,WidgetBuilder> _routes = {
AppRoute.of(AppScreen.alarmlist): (c) => AlarmlistScreen(),AppRoute.of(AppScreen.alarmDetails): (c) => AlarmDetailsScreen(),AppRoute.of(AppScreen.alarm): (c) => AlarmScreen(),AppRoute.of(AppScreen.dashboard): (c) => DashboardScreen(),};
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Og1 Alarm',theme: ThemeData(
primarySwatch: Colors.blue,),routes: _routes,initialRoute: AppRoute.of(AppScreen.alarmlist),home: Scaffold(
body: Center(
child: _routes[AppRoute.of(AppScreen.alarmlist)],bottomNavigationBar: BottomNavigationBar(
items: <BottomNavigationBarItem>[
BottomNavigationBarItem(icon: Icon(Icons.alarm_rounded)),BottomNavigationBarItem(icon: Icon(Icons.apps_rounded)),BottomNavigationBarItem(icon: Icon(Icons.analytics_rounded)),],currentIndex: 0,selectedItemColor: Palette.gainsboro,unselectedItemColor: Palette.lightGray,onTap: (index) {
switch (index) {
case 0:
Navigator.pushNamed(
context,AppRoute.of(AppScreen.alarmlist));
break;
case 1:
Navigator.pushNamed(
context,AppRoute.of(AppScreen.dashboard));
break;
case 2:
Navigator.pushNamed(
context,AppRoute.of(AppScreen.sleepMonitor));
break;
}
},));
}
}
首先在上面的线程中,从 MaterialApp 以某种方式访问路由,这在我的情况下会引发错误。 其次访问 _routes 变量为 _routes[AppRoute.of(AppScreen.alarmlist)] or_routes['/alarmlist'] throws (The argument type 'Widget Function(BuildContext)?' can't beassigned to the parameter type 'Widget?' )
感谢您的评价
解决方法
我能够按照此处的说明找到解决方案: https://www.vojtech.net/posts/flutter-bottom-navigation/