networkConfirmationEnabled property
Master kill-switch (BEH-17/NET-026) for the entire network confirm-before-
flip layer: confirm-before-flip, generation-token supersession, adaptive
cadence, the _lastStatus resync, the lifecycle resume re-probe, and the
startup fast self-heal cadence. When false, dreamic reproduces full
pre-hotfix connectivity behavior (immediate offline flip on the first
failed probe, fixed connected-interval cadence, log-only lifecycle
listener), so a field regression in the new logic can be neutralized from
Remote Config without an app-store release.
Unlike appCheckEnabled/fcmAutoInitialize (dart-define only), this is the
first RC-backed bool: it resolves env override → Remote Config → default,
mirroring the int-knob shape (NET-026). Because Firebase RC's getBool
returns false for BOTH an unset key and an explicitly-false key, the
"is-set" detection uses the raw string (RC stores bools as "true"/"false";
unset is ""), then the typed value is read via getBool.
Can be set via:
- Code:
AppConfigBase.networkConfirmationEnabledDefault = false - Build flag:
--dart-define dreamic_network_confirmation_enabled=false - Firebase Remote Config:
dreamic_network_confirmation_enabled
Default: true
Implementation
static bool get networkConfirmationEnabled {
const envValue = String.fromEnvironment('dreamic_network_confirmation_enabled');
// Only an explicit 'true'/'false' dart-define wins. Any OTHER non-empty
// value (a build-flag typo like `=1` or `=yes`) deliberately falls through
// to the RC/default path rather than silently coercing to `false` — because
// this knob is a safety kill-switch and a typo must not silently revert the
// whole resilience layer to pre-hotfix behavior. This intentionally diverges
// from the house `== 'true'` idiom (e.g. [lockOrientationToPortrait]) for
// that reason (NET-026 kill-switch hardening).
if (envValue == 'true') return true;
if (envValue == 'false') return false;
final rc = g<RemoteConfigRepoInt>();
// Raw-string "is-set" detection (getBool cannot distinguish unset from
// explicitly-false); read the typed value via getBool when set.
final rawValue = rc.getString('dreamic_network_confirmation_enabled');
if (rawValue.isNotEmpty) {
return rc.getBool('dreamic_network_confirmation_enabled');
} else {
return defaultRemoteConfig['dreamic_network_confirmation_enabled'] as bool;
}
}