当我的小部件使用字符串id进行引用时,如何将参数传递给有状态的小部件



在我的Flutter应用程序中,我使用const String id从一个屏幕导航到另一个屏幕,就像一样

static const String id = 'onboarding5'; //in onboarding5.dart
static const String id = 'Sessions';  //in sessions.dart

所以在我的main.dart中,我像一样初始化了我的路线

routes { 
Onboarding4.id: (context) => Onboarding4(),
Onboarding5.id: (context) => Onboarding5(),
Sessions.id: (context) => Sessions(),
},

在我的Onboarding5屏幕上,我有两个按钮;

  • 注册
  • 登录

单击其中一个将导航用户到会话屏幕。My Sessions类扩展了有状态小部件,并使用枚举FormType在SignUp和SignIn之间切换视图。

如何将_formType参数从onboarding5传递到Sessions类构造函数,而不更改当前使用静态const String id在屏幕中路由的方式?

通常,不声明静态常量字符串id的流行方式是这样的

Navigator.pushNamed(context, '/sessions');

Navigator.pushNamed(context, Sessions());

提前谢谢。

您可以将_formType作为参数传递。创建一个名为"SignArguments"的类它将包含您的枚举和您可能需要传递的其他信息。您可以使用final ScreenArguments args = ModalRoute.of(context).settings.arguments;接收SessionsScreens中的参数

enum sessionEnum {signUp , signIn}
class SignArguments {
final sessionEnum sessionType;
// you can pass other stuffs as well.
SignArguments(this.sessionType);
}
Navigator.pushNamed(context, '/sessions',arguments:SignArguments(sessionEnum.signUp));

接收你的论点

final ScreenArguments args = ModalRoute.of(context).settings.arguments;
// now you can access your enum which you have passed.
if (args.sessionType == sessionEnum.signIn) {
// do something.
}

你可以在这里阅读更多关于论点的内容https://flutter.dev/docs/cookbook/navigation/navigate-with-arguments.