instanceFieldsAndMethods property

  1. @override
List<String> instanceFieldsAndMethods

Any instance fields that should be copied to the adapter. Should terminate in ; if required.

Implementation

@override
List<String> get instanceFieldsAndMethods {
  final fieldsToColumns = unignoredFields.fold<List<String>>([], (acc, field) {
    final offlineFirstAnnotation = offlineFirstFields.annotationForField(field);
    final where =
        offlineFirstAnnotation.where?.entries.fold<List<String>>(<String>[], (acc, entry) {
      if (entry.value.contains("'")) {
        acc.add("'${entry.key}': \"${entry.value}\"");
      } else {
        acc.add("'${entry.key}': '${entry.value}'");
      }
      return acc;
    }).join(',');

    if (where != null && where.isNotEmpty) {
      final output = '''
        '${field.name}': const RuntimeOfflineFirstDefinition(
          where: <String, String>{$where},
        )
      ''';
      acc.add(output);
    }
    return acc;
  });

  return [
    if (fieldsToColumns.isNotEmpty)
      '@override\nfinal fieldsToOfflineFirstRuntimeDefinition = <String, RuntimeOfflineFirstDefinition>{${fieldsToColumns.join(',\n')}};',
    ...super.instanceFieldsAndMethods,
  ];
}