evaluateVersionGate function
GateDecision
evaluateVersionGate({
- required String currentVersion,
- 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;
}