MethodEqualityOperatorBuilder function
Method
MethodEqualityOperatorBuilder({})
Implementation
Method MethodEqualityOperatorBuilder({
required String className,
required List<FieldInfo> fields,
required DartEmitter emitter,
}) {
final equalityChecks = fields.map((field) {
final fieldType = field.type;
if (fieldType.startsWith('List<')) {
final listEqualsRef = FlutterTypes.foundation.listEquals([
refer(field.name),
refer('other.${field.name}'),
]);
return listEqualsRef.accept(emitter);
// return 'listEquals(other.${field.name}, ${field.name})';
} else if (fieldType.startsWith('Map<')) {
final mapEqualsRef = FlutterTypes.foundation.mapEquals([
refer(field.name),
refer('other.${field.name}'),
]);
return mapEqualsRef.accept(emitter);
// return 'mapEquals(other.${field.name}, ${field.name})';
} else if (fieldType.startsWith('Set<')) {
final setEqualsRef = FlutterTypes.foundation.setEquals([
refer(field.name),
refer('other.${field.name}'),
]);
return setEqualsRef.accept(emitter);
// return 'setEquals(other.${field.name}, ${field.name})';
}
return 'other.${field.name} == ${field.name}';
}).join(' && ');
return Method((b) => b
..name = 'operator =='
..annotations.add(refer('override'))
..returns = refer('bool')
..requiredParameters.add(Parameter((b) => b
..name = 'other'
..type = refer('Object')))
..body = Code('''
if (identical(this, other)) return true;
return other is $className && $equalityChecks;
'''));
}