Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 颤振Navigator.pushedName带有参数_Flutter_Dart - Fatal编程技术网

Flutter 颤振Navigator.pushedName带有参数

Flutter 颤振Navigator.pushedName带有参数,flutter,dart,Flutter,Dart,我正在导航到另一个类似这样的小部件,带有一个自定义对象的参数: Navigator.pushNamed(context, '/mortgage_screen', arguments: {'mortgageModel': mortgageModel}); 现在,根据flatter文档,我可以在新小部件的构建方法中获得参数,如下所示: final MortgageModel args = ModalRoute.of(context)!.settings.arguments; 但是,我收到以下

我正在导航到另一个类似这样的小部件,带有一个自定义对象的参数:

  Navigator.pushNamed(context, '/mortgage_screen', arguments: {'mortgageModel': mortgageModel});
现在,根据flatter文档,我可以在新小部件的构建方法中获得参数,如下所示:

final MortgageModel args = ModalRoute.of(context)!.settings.arguments;
但是,我收到以下错误消息:

无法将“Object”类型的值分配给“MortgageModel”类型的变量。尝试更改变量的类型,或将右侧类型强制转换为“MortgageModel”

谢谢

应该是:

Navigator.pushNamed(context, '/mortgage_screen', arguments: mortgageModel),
上面的代码传递的是
Map
type对象,而不是
MortgageModel
type对象

我猜这是个打字错误:
(异常点)?我想不出它为什么会在那里

ModalRoute.of(context)!.settings.arguments;
下面是一个完整的示例:

import 'package:flutter/material.dart';

class PassArgsPage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      routes: {
        '/': (context) => PageOne(),
        PageTwo.routeName: (context) => PageTwo()
      },
    );
  }
}

class MortgageModel {
  int yearsLeft = 30;
}

class PageOne extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    MortgageModel mortgageModel = MortgageModel();
    return Center(
      child: RaisedButton(
        child: Text('Go 2 /w Args'),
        onPressed: () => Navigator.pushNamed(context, PageTwo.routeName, arguments: mortgageModel),
      ),
    );
  }
}

class PageTwo extends StatelessWidget {
  static const routeName = '/pageTwo';
  @override
  Widget build(BuildContext context) {
    MortgageModel mortgageModel = ModalRoute.of(context).settings.arguments;
    return Scaffold(
      appBar: AppBar(title: Text('Pass Args P.2'),),
      body: Center(
        child: Text('Mortgage years remaining: ${mortgageModel.yearsLeft}'),
      ),
    );
  }
}

这是一个类型转换问题,似乎这个问题只出现在dev或master通道中。所以我试着用作为来修复它,它是有效的

在代码中,您可以通过以下方式修复它:

final MortgageModel args = ModalRoute.of(context)!.settings.arguments as MortgageModel ;
您可以在此处了解有关的更多信息,如

您的arguments对象是一个字典,您正试图将其分配给您的模型。它应该是
ModalRoute.of(context)!。参数['mortgageModel']@danypata。然后我得到运算符“[]”没有为类型“Object”定义。我已经尝试过了。但我有两个错误。没有这个!在我使用时,我得到了这样一个错误:一个值可以为“null”的表达式必须先检查null,然后才能取消引用。在取消引用之前,请尝试检查该值是否为“null”。打开文档当我放置时!,我仍然会遇到此错误:“Object”类型的值无法分配给“MortgageModel”类型的变量。尝试更改变量的类型,或将右侧类型转换为“MortgageModel”。@RJB哦,您正在beta或master颤振通道上运行,并且启用了空安全设置。你可能想研究零安全性的要求,或者将颤振通道改为稳定。这意味着,在零安全性开启的情况下,我无法通过论证?这意味着你可以在Dart中了解零安全性:)“试试这个”并不是一个好的答案。您应该解释这是如何以及为什么解决他们的问题的。我建议阅读“。这可以帮助未来的用户学习并最终将这些知识应用到他们自己的代码中。在解释代码时,用户也可能会给予积极的反馈/支持。谢谢,我会尽我所能做到这一点。
final MortgageModel args = ModalRoute.of(context)!.settings.arguments as MortgageModel ;