使用 ModalRoute 检索参数时出错

WXM*_*967 8 dart flutter

每次调用 modalroute 从命名路由检索参数时,我都会得到 null。

\n\n

这是代码片段:

\n\n
Navigator.pushNamed(\n           context, \n           VerifyCode.routeName, \n           arguments: {\'code\': randValue,},\n           );\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是我检索参数的地方:

\n\n
Widget build(BuildContext context) \n{\n   //Get the dialog provider to display information\n   alertViewModel = Provider.of<AlertViewModel>(context);\n\n   //Retrieve the route argument\n   final routeArgs =\n           ModalRoute.of(context).settings.arguments as Map<String, int>;\n\n    final securityCode = routeArgs[\'code\']; <-- Error happens here\n\n    print(\'Code =\' + securityCode.toString());\n   return Container()\n
Run Code Online (Sandbox Code Playgroud)\n\n

}

\n\n

我应该从地图中获取一个整数,但我收到了错误:

\n\n
 \xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90 Exception Caught By widgets library \xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\nThe following NoSuchMethodError was thrown building VerifyCode(dirty, dependencies: [InheritedProvider<AlertViewModel>, _ModalScopeStatus], state: _VerifyCodeState#98992):\nThe method \'[]\' was called on null.\nReceiver: null\nTried calling: []("code")\nWhen the exception was thrown, this was the stack\n#0      Object.noSuchMethod  (dart:core-patch/object_patch.dart:50:5)\n#1      _VerifyCodeState.build package:accidentapp/screens/verifycode.dart:42\n#2      StatefulElement.build \npackage:flutter/\xe2\x80\xa6/widgets/framework.dart:4012\n#3      ComponentElement.performRebuild package:flutter/\xe2\x80\xa6/widgets/framework.dart:3924\n#4      Element.rebuild\npackage:flutter/\xe2\x80\xa6/widgets/framework.dart:3721 \xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\xe2\x95\x90\n
Run Code Online (Sandbox Code Playgroud)\n\n

RouteArgs 始终为空。我尝试使用类来传递值而不是地图,但我收到了相同的错误。不确定我做错了什么。

\n

Fat*_*ari 8

将设置传递给 MaterialPageRoute

Route<dynamic> generateRoute(RouteSettings settings) {
return MaterialPageRoute(
  builder: (BuildContext context) {
    //some custom code
    return Page();
  },
  settings: settings
);
Run Code Online (Sandbox Code Playgroud)

}

  • 将此代码放入您的小部件`final argument = ModalRoute.of(context)!.settings.arguments as AuthenticationArguments;` (2认同)

Vru*_*tel 0

试试这个方法:-

 String rawJson = '{"code":randValue}';
 Map<String, dynamic> map = jsonDecode(rawJson);

 Navigator.pushNamed(context, VerifyCode.routeName, arguments: map);
Run Code Online (Sandbox Code Playgroud)

使用以下方式接收数据:-

final Map<String, dynamic> map = ModalRoute.of(context).settings.arguments;
Run Code Online (Sandbox Code Playgroud)

您可以使用获取数据

map["code"]
Run Code Online (Sandbox Code Playgroud)