OfflineOutboxService constructor

OfflineOutboxService({
  1. required StorageService storage,
  2. required OutboxUploader uploader,
  3. ConnectivityCoordinator? connectivity,
  4. ConflictPolicy conflictPolicy = ConflictPolicy.manual,
  5. ConflictMerger? merger,
  6. int capacity = 200,
  7. RetryPolicy retryPolicy = const RetryPolicy(maxAttempts: 3),
  8. RetryExecutor? retryExecutor,
  9. String? storageKey,
})

Implementation

OfflineOutboxService({
  required this.storage,
  required this.uploader,
  this.connectivity,
  this.conflictPolicy = ConflictPolicy.manual,
  this.merger,
  this.capacity = 200,
  this.retryPolicy = const RetryPolicy(maxAttempts: 3),
  RetryExecutor? retryExecutor,
  String? storageKey,
}) : _retryExecutor = retryExecutor ?? RetryExecutor(),
     _key = storageKey ?? StorageKeys.offlineOutboxV1 {
  if (capacity <= 0) {
    throw ArgumentError.value(capacity, 'capacity', 'must be > 0');
  }
  // ENH-89: was `assert(conflictPolicy != ConflictPolicy.merge ||
  // merger != null, ...)` — stripped entirely in release builds. A
  // caller passing `conflictPolicy: merge` without `merger` (a
  // hardcoded mistake, or a value assembled from remote config) would
  // then reach a real conflict at runtime with no merger to call,
  // failing confusingly deep inside the conflict-resolution path
  // instead of at construction. A plain `if`/`throw` is never
  // stripped, in any build mode.
  if (conflictPolicy == ConflictPolicy.merge && merger == null) {
    throw ArgumentError.value(
      merger,
      'merger',
      'is required when conflictPolicy is ConflictPolicy.merge',
    );
  }
  // BUG-40: see EconomyWallet's constructor for why this can't wait for
  // onInit() alone. The connectivity-subscription setup stays in onInit()
  // only — that's a GetX-lifecycle-bound side effect, not state hydration.
  _hydrate();
}