我想实现一个带有命名路线的底部导航栏。似乎视图一直在刷新,卡住了,而且当我点开底部导航标签时,它们与我的代码不一致。
final _navigatorKey = GlobalKey<NavigatorState>();
int currentIndex = 0;
List<String> _pages = <String>[
Routes.startupViewRoute,
Routes.startupViewRoute,
Routes.startupViewRoute,
];
@override
Widget build(BuildContext context) {
return Scaffold(
body: Navigator(
key: _navigatorKey,
initialRoute: Routes.startupViewRoute,
onGenerateRoute: Router().onGenerateRoute,
),
bottomNavigationBar: BottomNavigationBar(
type: BottomNavigationBarType.fixed,
currentIndex: currentIndex,
onTap: (index) {
_navigatorKey.currentState.pushNamed(_pages[index]);
},
items: [
BottomNavigationBarItem(
icon: new Icon(Icons.home),
title: new Text('Home'),
),
BottomNavigationBarItem(
icon: new Icon(Icons.person),
title: new Text('Profile'),
),
BottomNavigationBarItem(
icon: Icon(Icons.settings),
title: Text('Settings'),
)
],
),
);
1.在你要导航的屏幕上添加一个最终变量,用来存放路由,例如:static const routeName = 'pageName'; (这个很重要)。
在主页面需要添加:PageName.routeName:(ctx)=>PageName()。
在你想重定向到新页面的地方add:Navigator.of(ctx).pushNamed(PageName.routeName);你也可以通过它传递参数。