Dart 报错 Error: Field ‘x‘ should be initialized because its type ‘num‘ doesn‘t allow null.

在初学Dart和Flutter时,遇到构造函数导致的代码报错。原因为使用了非空安全性(NNBD)版本的Dart。通过采用构造函数的语法糖,即在参数前直接指定变量,成功避免了问题。此外,也可以通过在变量类型后添加问号来适应NNBD版本。

初学 dart & Flutter;
在跟着B站视频边看边写的时候,遇到了一个这样的问题;

class Person{

  void printInfo(){
    print("${this.x}----${this.y}");
  }
  num x, y;

  Person(num x, num y) {
    this.x = x;
    this.y = y;
  }
}

main(){
  Person p1 = new Person(1,2);
  p1.printInfo();
}

执行以上代码会报这样的错。
在这里插入图片描述
看着代码一样的,但会报错,虽然猜测是版本的原因导致,再在网上不好找到对应的说明。
再自己的摸索下,直接使用构造函数的语法糖,就能避免这个问题。

class Person{

  void printInfo(){
    print("${this.x}----${this.y}");
  }
  num x, y;

  Person(this.x, this.y);
}

main(){
  Person p1 = new Person(1,2);
  p1.printInfo();
}

再后面找到了一个说法是:使用默认情况下的Non-Null(NNBD)版本的Dart,可以通过在类型后面加问号变可以避免此问题。

Dart 中,出现 `Error: Field '_availableBiometrics' should be initialized because its type 'List<BiometricType>' doesn't allow null.` 错误,意味着 `_availableBiometrics` 字段被声明为非空类型 `List<BiometricType>`,但在声明时没有进行初始化。以下是几种快速解决该问题的方法: #### 1. 直接初始化 在声明字段时就为其赋一个初始值: ```dart import 'package:flutter/services.dart'; class BiometricService { List<BiometricType> _availableBiometrics = []; // 其他代码 } ``` #### 2. 使用 `late` 关键字 如果在声明时无法立即初始化字段,但可以保证在使用该字段之前会对其进行初始化,那么可以使用 `late` 关键字。`late` 关键字允许字段在声明时不进行初始化,但必须在使用前完成初始化 [^1]。 ```dart import 'package:flutter/services.dart'; class BiometricService { late List<BiometricType> _availableBiometrics; BiometricService() { // 模拟异步初始化 initBiometrics(); } Future<void> initBiometrics() async { // 假设这里是获取生物识别信息的异步操作 _availableBiometrics = await getAvailableBiometrics(); } Future<List<BiometricType>> getAvailableBiometrics() async { // 模拟返回生物识别信息 return [BiometricType.fingerprint]; } } ``` #### 3. 构造函数初始化 在类的构造函数中对字段进行初始化: ```dart import 'package:flutter/services.dart'; class BiometricService { List<BiometricType> _availableBiometrics; BiometricService() : _availableBiometrics = []; // 其他代码 } ```
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值