微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Flutter 访问我从 NavigationService 传递的值

如何解决Flutter 访问我从 NavigationService 传递的值

我有一个 NavigationService,我通过它向另一个屏幕传递一个值。但我无法真正访问我传递给新屏幕的这个值。

我的导航服务:

class NavigationService {
  final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();

  Future<dynamic> navigateto(String routeName,String eventName) {
    return navigatorKey.currentState.popAndPushNamed(routeName);
  }

  goBack() {
    navigatorKey.currentState.pop();
  }
}

传递值的行:

actions: <Widget>[
                    TextButton(
                      child: const Text('Submit'),onpressed: () {
                        textfieldController.text = eventName;
                        Navigator.pop(context);
                      
                        locator<NavigationService>()
                            .navigateto(SonglistRoute,eventName);
                      },

以及我取值的屏幕:

class SongListView extends StatelessWidget {
  final String eventName;
  const SongListView({Key key,this.eventName}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return ScreenTypeLayout(
      mobile: SonglistViewMobile(eventName: eventName),desktop: SonglistViewDesktop(eventName: eventName),);
  }
}
---- new File----
class SonglistViewDesktop extends StatefulWidget {
  final String eventName;
  SonglistViewDesktop({Key key,this.eventName}) : super(key: key);

  @override
  _songlistState createState() => _songlistState();
---i wont post my build widget here because its too much----
}

我无法访问我的构建小部件中的 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,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";

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。