flutter 这种用法的意义是什么

flutter what is the point of that usage

我在开源的flutter项目中找代码的时候,有个用户使用了这样的模型。我无法在这里得到这个想法。它不需要使用 getter 花括号术语中的重点是什么:

_email = email;
_password = password;
class LoginModel {
  String? _email;
  String? _password;

  LoginModel({
    String? email,
    String? password,
  }) {
    _email = email;
    _password = password;
  }

  Map<String, dynamic> toJson() {
    var map = <String, dynamic>{};
    map["email"] = _email;
    map["password"] = _password;
    return map;
  }

  set email(String value) => _email = value;
  set password(String value) => _password = value;
}

我强烈建议您观看一些有关 dart 的语言概述或查看文档 here。但要回答你的问题:

  1. 下划线表示变量是私有的。
  2. 花括号表示可选参数。因此初始化登录模型的人可以执行以下任何操作:
    LoginModel()
    LoginModel(email: "")
    LoginModel(password: "")
    LoginModel(email: "", password: "")

非可选参数在花括号外初始化。如果我希望需要电子邮件而不是密码,我可以执行以下操作: LoginModel(String email, {String? password})

实际上,您有几个选择:

  1. 而不是将 class 参数作为私有 命名,你可以只将它们私有并这样做(如果你想要它们要保密,他们不能被命名,因为其他 classes 将看不到名字):

    LoginModel(
            this._email,
            this._password,
          )
    
  2. 您可以通过向它们添加所需的标记并删除私有指示符 _ 来使它们命名并成为实例化 class 所必需的,如下所示:

    LoginModel({
            required this.email,
            required this.password,
          }) 
    
  3. 或者您可以只对它们进行命名而不是必需的(因为它们可以为空):

    LoginModel({
            this.email,
            this.password,
          })