如何从 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);