Flutter flatter访问我从导航服务传递的值
我有一个导航服务,通过它我可以将一个值传递到另一个屏幕。但我无法真正访问传递到新屏幕的值 我的导航服务:Flutter flatter访问我从导航服务传递的值,flutter,navigation,navigationservice,Flutter,Navigation,Navigationservice,我有一个导航服务,通过它我可以将一个值传递到另一个屏幕。但我无法真正访问传递到新屏幕的值 我的导航服务: class NavigationService { final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>(); Future<dynamic> navigateTo(String routeName, String eventName) { ret
class NavigationService {
final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
Future<dynamic> navigateTo(String routeName, String eventName) {
return navigatorKey.currentState.popAndPushNamed(routeName);
}
goBack() {
navigatorKey.currentState.pop();
}
}
我无法访问构建小部件中的eventName值
编辑
路由器类
Route<dynamic> generateRoute(RouteSettings settings) {
print('generateRoute: ${settings.name}');
switch (settings.name) {
case HomeRoute:
return _getPageRoute(HomeView());
case HelpRoute:
return _getPageRoute(HelpView());
case AboutRoute:
return _getPageRoute(AboutView());
case EnterRoute:
return _getPageRoute(EnterView());
case SonglistRoute:
return _getPageRoute(SongListView());
default:
return _getPageRoute(HomeView());
}
}
PageRoute _getPageRoute(Widget child) {
return PageRouteBuilder(
pageBuilder: (context, animation, secondaryAnimation) => child,
transitionsBuilder: (context, animation, secondaryAnimation, child) {
var begin = Offset(0.0, 1.0);
var end = Offset.zero;
var curve = Curves.ease;
var tween = Tween(begin: begin, end: end).chain(CurveTween(curve: curve));
return SlideTransition(
position: animation.drive(tween),
child: child,
);
},
);
}
const String HomeRoute = "home";
const String AboutRoute = "about";
const String HelpRoute = "help";
const String EnterRoute = "Enter";
const String SonglistRoute = "Songlist";
路由生成器输出(路由设置){
打印('generateRoute:${settings.name}');
开关(设置.名称){
案例回家路线:
返回_getPageRoute(HomeView());
案例帮助路线:
返回_getPageRoute(HelpView());
关于特鲁特的案例:
return _getPageRoute(AboutView());
病例入路:
返回_getPageRoute(EnterView());
个案路线:
return _getPageRoute(SongListView());
违约:
返回_getPageRoute(HomeView());
}
}
PageRoute\u getPageRoute(小部件子项){
返回页路由生成器(
pageBuilder:(上下文、动画、第二动画)=>子级,
transitionsBuilder:(上下文、动画、第二动画、子动画){
var begin=偏移量(0.0,1.0);
var end=偏移量0.0;
var曲线=Curves.ease;
变量tween=tween(开始:开始,结束:结束).chain(曲线之间(曲线:曲线));
返回幻灯片转换(
位置:动画。驱动(吐温),
孩子:孩子,
);
},
);
}
常量字符串HomeRoute=“home”;
常量字符串AboutRoute=“about”;
常量字符串HelpRoute=“help”;
常量字符串EnterRoute=“Enter”;
const String SonglistRoute=“Songlist”;
您没有对eventName执行任何操作。调用popAndPushNamed时,需要将其作为参数添加
navigatorKey.currentState.popAndPushNamed(routeName, arguments: eventName);
我假设您使用的是generatedRoutes,所以要访问参数,您可以这样做
Route<dynamic> generateRoute(RouteSettings settings) {
print('generateRoute: ${settings.name}');
switch (settings.name) {
case HomeRoute:
return _getPageRoute(HomeView());
case HelpRoute:
return _getPageRoute(HelpView());
case AboutRoute:
return _getPageRoute(AboutView());
case EnterRoute:
return _getPageRoute(EnterView());
case SonglistRoute:
return _getPageRoute(SongListView(eventName: settings.argument as String));
default:
return _getPageRoute(HomeView());
}});
路由生成器输出(路由设置){
打印('generateRoute:${settings.name}');
开关(设置.名称){
案例回家路线:
返回_getPageRoute(HomeView());
案例帮助路线:
返回_getPageRoute(HelpView());
关于特鲁特的案例:
return _getPageRoute(AboutView());
病例入路:
返回_getPageRoute(EnterView());
个案路线:
返回_getPageRoute(SongListView(事件名称:settings.argumentas String));
违约:
返回_getPageRoute(HomeView());
}});
谢谢您的回答!我真的不明白你是怎么理解这个论点的。我是否必须在我的视图中使用该值?MaterialPageRoute把我弄糊涂了,对不起,没问题!你能用显示歌曲列表视图的代码更新你的问题吗?我编辑了它。这是我的SongListView代码,我希望这是你想要的哈哈。你可以看到我试图用widget.EventName访问EventName,但这显然不起作用。啊,我指的是你必须导航到SongListView的代码。你们有路由器课程吗?或者你在MaterialApp小部件上设置了onGenerateRoute属性了吗?哦,我的坏哈哈!是的,我有一个,我编辑过:)
navigatorKey.currentState.popAndPushNamed(routeName, arguments: eventName);
Route<dynamic> generateRoute(RouteSettings settings) {
print('generateRoute: ${settings.name}');
switch (settings.name) {
case HomeRoute:
return _getPageRoute(HomeView());
case HelpRoute:
return _getPageRoute(HelpView());
case AboutRoute:
return _getPageRoute(AboutView());
case EnterRoute:
return _getPageRoute(EnterView());
case SonglistRoute:
return _getPageRoute(SongListView(eventName: settings.argument as String));
default:
return _getPageRoute(HomeView());
}});