如何从 pushNamed 接收参数
How to receive arguments from pushNamed
我已将 Navigator.push 更改为 Navigator.pushNamed
,但我不明白如何传递数据和 receive/use。如果我们使用 Navigator.push
,我们可以这样做并调用构造函数来使用数据,但是如果我们使用 Navigator.pushNamed
,它会发送参数。
现在,如何call/use这些参数?
在 /surveyPage 页面中,我如何调用参数?在 /surveyPage 我有构造函数 languageCode 但是因为我使用 pushNamed 我不能把 languageCode.
这是我要接收参数的小部件,我想将参数传递给languageCode
class SurveyConsentPage extends StatefulWidget {
SurveyConsentPage({this.languageCode, Key key}) : super(key: key);
final String languageCode;
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => SurveyConsentPage(
languageCode: 'id',
),
),
);
pushNamed
Navigator.of(context).pushNamed('/surveyPage', arguments: 'id');
路线
case '/surveyPage':
return MaterialPageRoute(builder: (context) => SurveyConsentPage());
break;
传递参数
onPressed: () {
final String id = "myId is X";
Navigator.of(context).pushNamed('/surveyPage', arguments: id);
},
要接收参数,必须检查空值,还要注意我传递的是 String
值,如果您使用不同的数据类型,请替换它。更好的方法是创建 class,如 cookbook
所示
@override
Widget build(BuildContext context) {
final arguments = ModalRoute.of(context)?.settings.arguments as String?;
return Scaffold(
appBar: AppBar(
title: Text(arguments ?? "did not get any data"),
),
);
}
您可以从 SurveyConsentPage
小部件中删除 languageCode
变量并使用 arguments
。
在您的路由案例中:
case '/surveyPage':
final code = settings.arguments as String;
return MaterialPageRoute(builder: (context) => SurveyConsentPage(languageCode: code));
break;
确保您已将 String languageCode
定义为 SurveyConsentPage
小部件的必需参数。
class SurveyConsentPage extends StatefulWidget {
final String languageCode;
SurveyConsentPage({required this.languageCode, Key key}) : super(key: key);
我已将 Navigator.push 更改为 Navigator.pushNamed
,但我不明白如何传递数据和 receive/use。如果我们使用 Navigator.push
,我们可以这样做并调用构造函数来使用数据,但是如果我们使用 Navigator.pushNamed
,它会发送参数。
现在,如何call/use这些参数?
在 /surveyPage 页面中,我如何调用参数?在 /surveyPage 我有构造函数 languageCode 但是因为我使用 pushNamed 我不能把 languageCode.
这是我要接收参数的小部件,我想将参数传递给languageCode
class SurveyConsentPage extends StatefulWidget {
SurveyConsentPage({this.languageCode, Key key}) : super(key: key);
final String languageCode;
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => SurveyConsentPage(
languageCode: 'id',
),
),
);
pushNamed
Navigator.of(context).pushNamed('/surveyPage', arguments: 'id');
路线
case '/surveyPage':
return MaterialPageRoute(builder: (context) => SurveyConsentPage());
break;
传递参数
onPressed: () {
final String id = "myId is X";
Navigator.of(context).pushNamed('/surveyPage', arguments: id);
},
要接收参数,必须检查空值,还要注意我传递的是 String
值,如果您使用不同的数据类型,请替换它。更好的方法是创建 class,如 cookbook
@override
Widget build(BuildContext context) {
final arguments = ModalRoute.of(context)?.settings.arguments as String?;
return Scaffold(
appBar: AppBar(
title: Text(arguments ?? "did not get any data"),
),
);
}
您可以从 SurveyConsentPage
小部件中删除 languageCode
变量并使用 arguments
。
在您的路由案例中:
case '/surveyPage':
final code = settings.arguments as String;
return MaterialPageRoute(builder: (context) => SurveyConsentPage(languageCode: code));
break;
确保您已将 String languageCode
定义为 SurveyConsentPage
小部件的必需参数。
class SurveyConsentPage extends StatefulWidget {
final String languageCode;
SurveyConsentPage({required this.languageCode, Key key}) : super(key: key);