重写operator和hashCode 方法的属性是否和旧的属性相同
@override
bool operator ==(Object other) {
if (identical(this, other)) {
return true;
}
if (other.runtimeType != runtimeType) {
return false;
}
return other is AxisLabel &&
other.labelStyle == labelStyle &&
other.labelSize == labelSize &&
other.text == text &&
other.trimmedText == trimmedText &&
other.renderText == renderText &&
other.value == value;
}
@override
int get hashCode {
final List<Object?> values = <Object?>[
labelStyle,
labelSize,
text,
trimmedText,
renderText,
value
];
return Object.hashAll(values);
}
或者通过插件(equatable)https://pub.dev/packages/equatable
通过继承省去写繁杂的operator和hascode
import 'package:equatable/equatable.dart';
class Person extends Equatable {
const Person(this.name);
final String name;
@override
List<Object> get props => [name];
}
重写对比的属性
@override
List<Object> get props => [name];
@override
bool get stringify => true; // 将对象String化
全局配置string化
EquatableConfig.stringify = true;
对于不能继承的使用EquatableMixin 集成
class EquatableDateTime extends DateTime with EquatableMixin {
EquatableDateTime(
int year, [
int month = 1,
int day = 1,
int hour = 0,
int minute = 0,
int second = 0,
int millisecond = 0,
int microsecond = 0,
]) : super(year, month, day, hour, minute, second, millisecond, microsecond);
@override
List<Object> get props {
return [year, month, day, hour, minute, second, millisecond, microsecond];
}
}
子类新增属性
class EquatableDateTimeSubclass extends EquatableDateTime {
final int century;
EquatableDateTimeSubclass(
this.century,
int year,[
int month = 1,
int day = 1,
int hour = 0,
int minute = 0,
int second = 0,
int millisecond = 0,
int microsecond = 0,
]) : super(year, month, day, hour, minute, second, millisecond, microsecond);
@override
List<Object> get props => super.props..addAll([century]);
}
网友评论