flutter 错误:尝试添加初始值设定项表达式,或在此构造函数中添加字段初始值设定项,或将其标记为'late'

ki1q1bka  于 2023-03-24  发布在  Flutter
关注(0)|答案(4)|浏览(130)
void main() {
  Car c1 = new Car('E1001');
}

class Car {
  String engine;
  Car(String engine) {
    this.engine = engine;
    print("The engine is : ${engine}");
  }
}
ifmq2ha2

ifmq2ha21#

在 dart 零位安全特性中
1.或者通过?使引擎变量可为空,

class Car {
  String? engine;
  Car(String engine){
     this.engine = engine;
     print("The engine is : ${engine}");
  }
}

1.或者添加late关键字来惰性地初始化它,

class Car {
  late String engine;
  Car(String engine){
     this.engine = engine;
     print("The engine is : ${engine}");
  }
}

1.或者在构造函数的initialize块中初始化变量。

class Car {
  String engine;
  Car(String engine) : engine = engine {
     print("The engine is : ${engine}");
  }
}
x759pob2

x759pob22#

更新,用于初始化构造函数中的变量:

class Car{
    String name;
    int wights; 
    Car(this.name,this.wigths);
    Car.origin(): this.name='', this.wigths=0;
  }
huus2vyu

huus2vyu3#

Ravi Setva的公认答案有助于解决查询,但这里是关于为什么方法1和2工作的解释:
1.允许为空:默认情况下,Dart是“Non-nullable”,这意味着一个变量不能包含null值,除非它首先用null初始化。这具有编译器优化的优点,可以标记在整个程序生命周期中不能为null的东西。然而,使用?允许null s被使用。所以这取决于我们使用这个原则,Dart没有强迫我们。
1.惰性初始化:这是一个概念,基本上意味着变量可以在声明之后立即初始化。这是通过在变量声明期间使用late关键字来实现的。这是出于许多复杂的原因,其中最简单的原因是为了防止在声明变量期间进行繁重的操作,以简化和优化性能,并为以后的时间标记这些操作。它实际上是需要的。

jm81lzqq

jm81lzqq4#

使用late关键字可以创建一个null变量。
Ex:late String engine;
“?”用于生成空值。
例如:String?engine;

相关问题