SyncCollectionConfig<T extends dynamic> class

Configuration for a single collection/model to be synced between Realm and MongoDB.

This class defines how a Realm collection should sync with the server, including serialization, conflict resolution, and custom processing logic.

Minimum Required Configuration (4 fields)

SyncCollectionConfig<ChatMessage>(
  results: realm.all<ChatMessage>(),           // Required: What to sync
  collectionName: 'chat_messages',             // Required: MongoDB collection name
  idSelector: (obj) => obj.id,                 // Required: How to get object ID
  needsSync: (obj) => obj.syncUpdateDb,        // Required: When to sync
)

Automatic Behaviors (Zero Configuration Needed)

  • Serialization: Automatically uses generated toEJson() from .realm.dart files
  • Nested Objects: All relationships (to-one, to-many, embedded) serialize recursively
  • Conflict Resolution: Last-write-wins based on sync_updated_at timestamps
  • Sanitization: Removes internal 'sync_update_db' field before sending to server
  • Flag Management: Automatically clears syncUpdateDb flag after successful sync

Optional Customization

Custom Serialization

toSyncMap: (obj) => {'_id': obj.id, 'custom': obj.computed},
fromServerMap: (map) => MyModel(map['_id'], custom: map['custom']),

Pre-Processing Hook (NEW!)

emitPreProcessor: (rawJson) {
  rawJson['clientVersion'] = '1.0.0';
  rawJson['deviceId'] = DeviceInfo.id;
  return rawJson;
},

Lifecycle Callbacks

applyAckSuccess: (obj) => print('Synced: ${obj.id}'),
applyNoDiff: (obj) => print('No changes: ${obj.id}'),

Custom Sanitization

sanitize: (map) {
  map.remove('localOnlyField');
  return map;
},

Schema Hints (Rarely Needed)

Only required if auto-detection fails or for advanced nested object scenarios:

propertyNames: ['id', 'name', 'timestamp', 'sync_updated_at'],
embeddedProperties: {'user': ['id', 'name']},
embeddedCreators: {'user': (map) => User(map['id'], map['name'])},
create: () => MyModel('', '', DateTime.now()),

Constructors

SyncCollectionConfig({required dynamic results, required String collectionName, required String idSelector(dynamic model), required bool needsSync(dynamic model), Map<String, dynamic> toSyncMap(dynamic model)?, dynamic fromServerMap(Map<String, dynamic> serverMap)?, List<String>? propertyNames, Map<String, List<String>>? embeddedProperties, Map<String, dynamic Function(Map<String, dynamic>)>? embeddedCreators, T create()?, void applyAckSuccess(dynamic model)?, void applyNoDiff(dynamic model)?, Map<String, dynamic> sanitize(Map<String, dynamic>)?, Map<String, dynamic> emitPreProcessor(Map<String, dynamic>)?, dynamic decode(Map<String, dynamic> serverMap)?})

Properties

applyAckSuccess → void Function(dynamic model)?
Optional callback invoked after successful sync acknowledgment from server.
final
applyNoDiff → void Function(dynamic model)?
Optional callback when no changes detected (diff was empty).
final
collectionName → String
MongoDB collection name where data will be synced.
final
create → T Function()?
Optional factory function to create empty model instances.
final
decode → dynamic Function(Map<String, dynamic> serverMap)?
Internal decoder function that preserves generic type T.
final
embeddedCreators → Map<String, dynamic Function(Map<String, dynamic>)>?
Optional factory functions for creating embedded/nested objects.
final
embeddedProperties → Map<String, List<String>>?
Optional nested object property mapping for custom serialization.
final
emitPreProcessor → Map<String, dynamic> Function(Map<String, dynamic>)?
Optional pre-processor to modify payload before emitting to server.
final
fromServerMap → dynamic Function(Map<String, dynamic> serverMap)?
Optional custom function to deserialize server data into Realm objects.
final
hashCode → int
The hash code for this object.
no setterinherited
idSelector → String Function(dynamic model)
Function to extract the unique identifier from a model instance.
final
needsSync → bool Function(dynamic model)
Predicate function to determine if an object needs syncing.
final
propertyNames → List<String>?
Optional list of property names for schema introspection fallback.
final
results → dynamic
The Realm query results to sync. Changes to these objects trigger sync operations.
final
runtimeType → Type
A representation of the runtime type of the object.
no setterinherited
sanitize → Map<String, dynamic> Function(Map<String, dynamic>)?
Optional function to sanitize data before sending to server.
final
toSyncMap → Map<String, dynamic> Function(dynamic model)?
Optional custom function to serialize objects before sending to server.
final

Methods

noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
toString() → String
A string representation of this object.
inherited

Operators

operator ==(Object other) → bool
The equality operator.
inherited