flutter dart类中的构造函数

643ylb08  于 2023-05-08  发布在  Flutter
关注(0)|答案(3)|浏览(312)

在dart类中的构造函数中使用花括号和不使用花括号有什么区别?以及为什么当你使用花括号时,你不能在构造函数中有不可空和未初始化的字段,但是当你不使用花括号时,你可以。
以下是示例:

class Animal{
  String name;
  int age;

  Animal({this.name, this.age});
}

当我写这样的类时,有一个错误说:“参数'name'不能有'null'的值,因为它的类型,但隐式默认值是'null'。",对于'age'也是一样。

class Animal{
  String name;
  int age;

  Animal(this.name, this.age);
}

但是当我不使用花括号时,就没有错误,它允许在构造函数中有空字段。

szqfcxe2

szqfcxe21#

在Dart中,大括号{}定义命名参数,而省略大括号则定义位置参数。默认情况下,当命名参数与花括号一起使用时,它们是可空的和可选的。若要强制非空性,请在参数名称前使用required关键字。对于位置参数,它们在默认情况下是必需的,但如果没有显式初始化,它们仍然可以为空。

jogvjijk

jogvjijk2#

带背带的

void main() {
  print(Animal(name: "Stark")) ; // I dont have to enter age because 
  //  its nullable
  // it is the same as 
   print(Animal(name: "Stark" , age: null))  ; // after using braces inputs not are mapped
    print(Animal(age: null)) ; // error   name: is required
  
}

  class Animal{
  String name; // not nullable
  int? age;  //  nulabble

  Animal({required this.name, this.age}); // 
}

因此不能将不可空值Map为null,因为类Null不是String或int或任何其他安全为null的类的子类型

luaexgnf

luaexgnf3#

使用大括号时,需要定义命名参数。例如:

class Animal{
  String name;
  int age;

  Animal({this.name, this.age});
}

你应该像这样示例化:

Animal(
  name: "Dog",
  age: 5,
);

如果你定义的构造函数没有大括号,你定义的是位置参数。

class Animal{
  String name;
  int age;

  Animal(this.name, this.age);
}

然后你应该像这样示例化:

Animal("Cat", 3);

如果添加required关键字,则该参数为强制参数。
如果在类型后声明一个属性为nullable,则对于ewample

int? age

您的name参数不再是必需的。

相关问题