![](/img/trans.png)
[英]Flutter using inherited widgets with Navigator returning NoSuchMethodError
[英]Using named Navigator from different widgets in flutter?
我需要使用来自另一个小部件(屏幕)的命名导航导航到一个小部件(屏幕)。 这是MyHomePage
Widget 的主体
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, );
},
),
我可以使用_navigatorKey.currentState.pushNamed(routeNames[tabItem])
从bottomNavigationBar
切换这些PageRoutes
,其中routeNames
是字符串列表['/', '/cart', '/account']
。 这工作正常。
现在,从UIAccountPage()
中,我有一个名为“Cart”的 ListTile,我希望在点击该特定图块时导航到UICartPage
。 我还希望使用其他几个图块导航到其他小部件(屏幕)。
为此,我是否必须在onGenerateRoute
中扩展MyHomePage
以适应其他路线,或者我必须在某处创建另一个自定义导航器? 我很矛盾。 如果有人可以用一个简单的插图来指导,那就太棒了。
谢谢
编辑:我也不知道 Navigator 中的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(),
},
);
}
}
当我尝试 go 到另一个视图时,我使用:
Navigator.pushReplacementNamed(context, '/home');
其中第二个参数是路由中定义的名称。
希望它对你有帮助!
1,我认为您应该尝试使用PageView或TabView的BottomNavigationBar 。
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) {
.....
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.