DatumManager<T extends DatumEntityInterface> constructor
DatumManager<T extends DatumEntityInterface> ({
- required LocalAdapter<
T> localAdapter, - required RemoteAdapter<
T> remoteAdapter, - DatumConflictResolver<
T> ? conflictResolver, - required DatumConnectivityChecker connectivity,
- DatumConfig<
T> ? datumConfig, - DatumLogger? logger,
- List<
DatumObserver< ? localObservers,T> > - List<
DatumMiddleware< ? middlewares,T> > - List<
GlobalDatumObserver> ? globalObservers, - DatumSyncRequestStrategy? syncRequestStrategy,
- String? deviceId,
- DatumPersistence? persistence,
- 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();
}