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());
}});