evaluateVersionGate function

GateDecision evaluateVersionGate({
  1. required String currentVersion,
  2. required AppVersionGateConfig config,
})

Pure decision function — no I/O, no singletons, easy to fixture-test.

Safety-first: any invalid input (an unparseable currentVersion, or an unparseable AppVersionGateConfig.minimumVersion/ AppVersionGateConfig.recommendedVersion) is treated as "can't tell, so don't block" — a corrupt or malformed config can degrade to ok but can never force-block a user who did nothing wrong. Only AppVersionGateConfig.maintenanceActive (a plain bool, can't be "invalid") can force/maintenance-gate independent of version parsing.

Implementation

GateDecision evaluateVersionGate({
  required String currentVersion,
  required AppVersionGateConfig config,
}) {
  if (config.maintenanceActive) return GateDecision.maintenance;

  final minimum = config.minimumVersion;
  if (minimum != null) {
    final cmp = compareAppVersions(currentVersion, minimum);
    if (cmp != null && cmp < 0) return GateDecision.forceUpdate;
  }

  final recommended = config.recommendedVersion;
  if (recommended != null) {
    final cmp = compareAppVersions(currentVersion, recommended);
    if (cmp != null && cmp < 0) return GateDecision.softUpdate;
  }

  return GateDecision.ok;
}