我在 flutter dart 中使用 equatable 来生成一些样板代码。 这是一个使用Equitable生成一些样板代码的类
import 'package:equatable/equatable.dart';
class Task extends Equatable {
final String title;
bool? isDone;
bool? isDeleted;
Task({
required this.title,
this.isDone,
this.isDeleted,
}) {
isDone = isDone ?? false;
isDeleted = isDeleted ?? false;
}
Task copyWith({
String? title,
bool? isDone,
bool? isDeleted,
}) {
return Task(
title: title ?? this.title,
isDone: isDone ?? this.isDone,
isDeleted: isDeleted ?? this.isDeleted,
);
}
Map<String, dynamic> toMap() {
final result = <String, dynamic>{};
result.addAll({'title': title});
if (isDone != null) {
result.addAll({'isDone': isDone});
}
if (isDeleted != null) {
result.addAll({'isDeleted': isDeleted});
}
return result;
}
factory Task.fromMap(Map<String, dynamic> map) {
return Task(
title: map['title'] ?? '',
isDone: map['isDone'],
isDeleted: map['isDeleted'],
);
}
@override
List<Object?> get props => [
title,
isDeleted,
isDone,
];
}
我的问题是为什么这段代码以及这段代码在做什么?我阅读了一些文档,但没有找到确切的答案。文档说它用于与另一个类进行比较,但为什么我们需要比较?另外,我不会写任何其他类(class)。那么正在比较哪些类别呢?还是不用来比较??
@override
List<Object?> get props => [
id,
title,
isDeleted,
isDone,
];
这行代码的目的是什么?
另外,为什么我们使用 Object
类?
最佳答案
这是指定要比较哪个属性来检查一个实例是否等于同一类的另一个实例。这很有用,因为如果我们想要或不想比较某个属性,我们可以将其添加或删除到返回的数组中。
在此示例中,此代码比较任务的第一个实例是否等于任务的第二个实例。
main() {
var task1 = Task(title: 'task 1', isDone: true, isDeleted: true);
var task2 = Task(title: 'task 2', isDone: false, isDeleted: false);
print(task1 == task2); // false
}
它返回List<Object>
因为类 Task 扩展了 Equatable,所以 Task 需要重写 List<Object?> get props
.
该函数比较字符串和 bool 值。请记住,字符串和 bool 值都是 Object
在 dart 中,因此如果您仅比较字符串或 bool 值,您可以返回 List<String>
或List<bool>
.
关于flutter - 为什么要在 Dart 类里面使用 Prop ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73676305/