instanceFieldsAndMethods property

  1. @override
List<String> get instanceFieldsAndMethods

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

Implementation

@override
List<String> get instanceFieldsAndMethods {
  final fieldsToColumns = <String>[];
  final uniqueFields = <String>{};
  final config = (fields as SupabaseFields).config;

  for (final field in unignoredFields) {
    final annotation = fields.annotationForField(field);
    final checker = checkerForType(field.type);
    final columnName = providerNameForField(annotation.name, checker: checker);
    final isAssociation = checker.isSibling || (checker.isIterable && checker.isArgTypeASibling);

    var definition = '''
      '${field.name}': const RuntimeSupabaseColumnDefinition(
        association: $isAssociation,
        columnName: '$columnName',
    ''';
    if (isAssociation) definition += 'associationType: ${checker.withoutNullResultType},';
    if (isAssociation) definition += 'associationIsNullable: ${checker.isNullable},';
    if (annotation.foreignKey != null) definition += "foreignKey: '${annotation.foreignKey}',";
    if (annotation.query != null) definition += "query: '''${annotation.query}''',";
    definition += ')';
    fieldsToColumns.add(definition);

    if (annotation.unique) uniqueFields.add(field.name);
  }

  return [
    if (config?.defaultToNull != null)
      '@override\nfinal defaultToNull = ${config?.defaultToNull};',
    '@override\nfinal fieldsToSupabaseColumns = {${fieldsToColumns.join(',\n')}};',
    '@override\nfinal ignoreDuplicates = ${config?.ignoreDuplicates};',
    if (config?.onConflict != null) "@override\nfinal onConflict = '${config?.onConflict}';",
    '@override\nfinal uniqueFields = {${uniqueFields.map((u) => "'$u'").join(',\n')}};',
  ];
}