在我的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.