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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.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
如何在带有私有变量的dart构造函数中使用此函数_Dart_Flutter - Fatal编程技术网

如何在带有私有变量的dart构造函数中使用此函数

如何在带有私有变量的dart构造函数中使用此函数,dart,flutter,Dart,Flutter,当我尝试在dart中创建一个构造函数时,比如Student(this.\u name),它不能处理私有变量 我已经尝试过使用setter,但它也不起作用 class Student{ var _id; var _name; Student(this.id, this.name); void set id(int id) => _id = id; void set name(String name) => _name = name;

当我尝试在dart中创建一个构造函数时,比如
Student(this.\u name)
,它不能处理私有变量

我已经尝试过使用setter,但它也不起作用

    class Student{

    var _id;
    var _name;

    Student(this.id, this.name);

    void set id(int id) => _id = id;
    void set name(String name) => _name = name;

    }

这是不受支持的,因为它将向外部公开私有实现

如果您要重命名
var\u id
var\u用户id只需重命名一个私有字段,就可以破坏使用类的代码。
请看我回答下面的评论

替代方案

  class Student{

    var _id;
    var _name;

    Student({int id, String name}) : _id = id, _name = name;

    void set id(int id) => _id = id;
    void set name(String name) => _name = name;
  }

当然可以。这不仅是因为您将它们设置为可选的命名参数(
Student({this.\u id,this.\u name});
是不允许的)好的,所以在使用可选命名参数的情况下,我必须在构造函数体中设置变量?请参阅我的答案。一些提示。使用适当的字段类型,而不是
var
<对于声明时初始化的局部变量,code>var
可以。如果私有字段不包含其他逻辑,则不要对其使用公共getter/setter。您可以随时用getter/setter替换字段,反之亦然,而无需中断代码的用户。不允许使用私人命名的参数的原因是您不能从其他库调用它们。如果声明
foo({int\u x}){…}
则其他库不能提供该参数,因为
foo({int\u x:42)
在不同的库中是不同的名称。例如,没有其他库能够重写这些方法。因此,一般情况下,命名参数不允许有私有名称。(这并不是因为更改名称会破坏任何人,因为根本没有人可能会使用该名称)。对于此解决方案是否是惯用的Dart,是否有任何评论?Dart中的语言选择似乎有意避免向消费者隐藏成员(例如依赖项)
  class Student{

    var _id;
    var _name;

    Student({int id, String name}) : _id = id, _name = name;

    void set id(int id) => _id = id;
    void set name(String name) => _name = name;
  }