Flutter 变相实现构造函数的重载

20 min read

Flutter 使用命名构造函数变相实现构造函数的重载

main(List<String> args) {
  // 1.创建Person对象
  var p = Person.withNameAgeHeight("why", 18, 1.88);
  // print(p.toString());

  var p1 = Person.fromMap({
    "name": "lilei",
    "age": 18,
    "height": 1.88
  });
  print(p1);

  // 2.知识点: Object和dynamic的区别
  // 父类应用指向子类对象
  // Object和dynamic
  // Object调用方法时, 编译时会报错
  // dynamic调用方法时, 编译时不报错, 但是运行时会存在安全隐患

  // Object obj = "why";
  // print(obj.substring(1));

  // 明确声明
  // dynamic obj = 123;
  // print(obj.substring(1));
}

class Person {
  String name;
  int age;
  double height;

  Person(this.name, this.age);
  // Person(this.name, this.age, this.height);

  // 命名构造函数
  Person.withNameAgeHeight(this.name, this.age, this.height);
  Person.fromMap(Map<String, dynamic> map) {
    this.name = map["name"];
    this.age = map["age"];
    this.height = map["height"];
  }

  @override
  String toString() {
    return "$name $age $height";
  }
}

命名构造函数的语法使用 类名.构造函数