buildEqualitySnippet function

String buildEqualitySnippet(
  1. String className,
  2. List<({bool isCollection, bool isNamed, bool isNullable, String name, String type})> fields, {
  3. required DartFileEditBuilder builder,
})

Builds equality operator snippet.

Implementation

String buildEqualitySnippet(
  String className,
  List<
    ({
      String name,
      String type,
      bool isNamed,
      bool isNullable,
      bool isCollection,
    })
  >
  fields, {
  required DartFileEditBuilder builder,
}) {
  if (fields.any((f) => f.isCollection)) {
    builder.importLibrary(Uri.parse('package:collection/collection.dart'));
  }

  final equalityFields = fields
      .map((f) {
        if (f.isCollection) {
          return 'const DeepCollectionEquality().equals(${f.name}, other.${f.name})';
        }
        return '${f.name} == other.${f.name}';
      })
      .join(' && ');
  final equalityCheck = fields.isNotEmpty ? ' && $equalityFields' : '';
  return '''

  @override
  bool operator ==(Object other) =>
      identical(this, other) ||
      other is $className$equalityCheck;''';
}