【发布时间】:2022-12-03 12:07:56
【问题描述】:
我想更正代码的错误。 我的问题是:
必须初始化不可为 null 的实例字段。
【问题讨论】:
标签: flutter android-studio dart
我想更正代码的错误。 我的问题是:
必须初始化不可为 null 的实例字段。
【问题讨论】:
标签: flutter android-studio dart
这是我们在 Dart/Flutter 中执行此操作的常规方式:
class Course {
final int id;
final String name;
final String content;
final int hours;
const Course({
this.id = 0;
this.name = '';
this.content = '';
this.hours = 0;
});
factory Course.fromMap<String, dynamic> data) {
return Course(
id: data['id'] as int ?? 0,
name: data['name'] as String ?? '',
content: data['content'] as String ?? '',
hours: data['hours'] as int ?? 0,
);
}
}
...
final course = Course.fromMap(data);
我们通常不会为数据类使用下划线(私有)变量,因为 Dart 会自动提供 getter 来通过点符号访问字段。
final name = course.name;
【讨论】:
不可为 null 的字段应该在对象创建期间初始化,甚至在执行构造函数主体之前。为此,请使用像这样的初始化列表
Course(dynamic obj): _id = obj['id'], _name = obj['name'] {}
【讨论】: