DatumManager<T extends DatumEntityInterface> constructor

DatumManager<T extends DatumEntityInterface>({
  1. required LocalAdapter<T> localAdapter,
  2. required RemoteAdapter<T> remoteAdapter,
  3. DatumConflictResolver<T>? conflictResolver,
  4. required DatumConnectivityChecker connectivity,
  5. DatumConfig<T>? datumConfig,
  6. DatumLogger? logger,
  7. List<DatumObserver<T>>? localObservers,
  8. List<DatumMiddleware<T>>? middlewares,
  9. List<GlobalDatumObserver>? globalObservers,
  10. DatumSyncRequestStrategy? syncRequestStrategy,
  11. String? deviceId,
  12. DatumPersistence? persistence,
  13. Stream<String?>? userChangeStream,
})

Implementation

DatumManager({
  required this.localAdapter,
  required this.remoteAdapter,
  DatumConflictResolver<T>? conflictResolver,
  required DatumConnectivityChecker connectivity,
  DatumConfig<T>? datumConfig,
  DatumLogger? logger,
  List<DatumObserver<T>>? localObservers,
  List<DatumMiddleware<T>>? middlewares,
  List<GlobalDatumObserver>? globalObservers,
  DatumSyncRequestStrategy? syncRequestStrategy,
  this.deviceId,
  this.persistence,
  Stream<String?>? userChangeStream,
})  : config = datumConfig ?? const DatumConfig(),
      _connectivity = connectivity,
      // The logger's enabled status should always respect the config.
      _logger = (logger ??
              DatumLogger(
                enabled: datumConfig?.enableLogging ?? true,
                minimumLevel: datumConfig?.logLevel ?? LogLevel.info,
                enablePerformanceLogging: datumConfig?.enablePerformanceLogging ?? false,
                performanceThreshold: datumConfig?.performanceLogThreshold ?? const Duration(milliseconds: 100),
                samplers: datumConfig?.logSamplers ?? const {},
              ))
          .copyWith(
        enabled: datumConfig?.enableLogging ?? true,
        minimumLevel: datumConfig?.logLevel ?? LogLevel.info,
        enablePerformanceLogging: datumConfig?.enablePerformanceLogging ?? false,
        performanceThreshold: datumConfig?.performanceLogThreshold ?? const Duration(milliseconds: 100),
        samplers: datumConfig?.logSamplers ?? const {},
      ),
      _conflictResolver = conflictResolver ?? datumConfig?.defaultConflictResolver ?? LastWriteWinsResolver<T>(),
      _syncRequestStrategy = syncRequestStrategy ?? datumConfig?.syncRequestStrategy ?? const SequentialRequestStrategy() {
  _localObservers.addAll((localObservers ?? []).map(_WeakObserver.new));
  _globalObservers.addAll((globalObservers ?? []).map(_WeakObserver.new));
  _middlewares.addAll(middlewares ?? []);

  // If the local adapter supports user change streams, pass it along
  if (userChangeStream != null) {
    try {
      // Try to set the userChangeStream property if it exists
      (localAdapter as dynamic).userChangeStream = userChangeStream;
    } catch (e) {
      // Ignore if the adapter doesn't support user change streams
    }
  }

  _initializeInternalComponents();
}