我需要使用另一个窗口小部件(屏幕)中的命名导航来导航到窗口小部件(屏幕)。这是MyHomePage
小部件的正文
body: Navigator(
key: _navigatorKey,
initialRoute: '/',
onGenerateRoute: (RouteSettings settings) {
WidgetBuilder builder;
switch (settings.name) {
case '/':
builder = (BuildContext context) => UIHomePage();
break;
case '/cart':
builder = (BuildContext context) => UICartPage();
break;
case '/account':
builder = (BuildContext context) => UIAccountPage();
break;
default:
throw Exception('Invalid route: ${settings.name}');
}
return MaterialPageRoute(builder: builder, settings: settings, );
},
),
我可以用PageRoutes
从bottomNavigationBar
切换这些_navigatorKey.currentState.pushNamed(routeNames[tabItem])
,其中routeNames
是字符串['/', '/cart', '/account']
的列表。效果很好。
现在,从UIAccountPage()
,这里有一个名为'Cart'的ListTile,我希望在点击该特定图块时导航到UICartPage
。我还希望使用其他几个图块导航到其他小部件(屏幕)。
要实现这一点,我是否必须在onGenerateRoute
中扩展MyHomePage
以适应其他路线,还是必须在某个地方创建另一个自定义导航器?我很矛盾。如果有人可以用简单的说明进行指导,那将是很棒的。
谢谢
编辑:另外,我也不知道setting
在导航器中的作用,_navigatorKey是final _navigatorKey = GlobalKey<NavigatorState>()
我使用Flutter还是很新的,但是我已经实现了这种方法,可以很好地用于路由。
class Main extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Temp Detector',
initialRoute: '/',
routes: {
'/': (context) => AuthScreen(),
'/register': (context) => SignInScreen(),
'/login': (context) => LoginScreen(),
'/home': (context) => HomeScreen(),
'/config': (context) => ConfigScreen(),
},
);
}
}
并且当我尝试转到另一个视图时,我使用:
Navigator.pushReplacementNamed(context, '/home');
第二个参数是路径中定义的名称。
希望它对您有帮助!
1,我认为您应该尝试将BottomNavigationBar与PageView或TabView一起使用。
2,关于您的问题,您可以尝试使用选项为UIAccountPage:]创建回调
case '/account': builder = (BuildContext context) => UIAccountPage(onTapCart: () { _navigatorKey.currentState.pushNamed('/cart'); }); break;
和UIAccountPage
class UIAccountPage extends StatelessWidget {
VoidCallback onTapCart;
UIAccountPage({this.onTapCart});
@override
Widget build(BuildContext context) {
.....
}
}