compareVersions function

int compareVersions(
  1. String a,
  2. String b
)

Compare dotted versions ("2.3.0" vs "2.10.0") segment-wise, numerically; missing segments count as "0" ("2.3" == "2.3.0"); non-numeric segments (build labels etc.) compare lexically — plain semver-prerelease ordering (2.0.0-dev < 2.0.0) is intentionally out of scope. Returns negative/zero/positive.

Implementation

int compareVersions(String a, String b) {
  final pa = a.split('.');
  final pb = b.split('.');
  final n = math.max(pa.length, pb.length);
  for (var i = 0; i < n; i++) {
    final sa = i < pa.length ? pa[i] : '0';
    final sb = i < pb.length ? pb[i] : '0';
    final na = int.tryParse(sa);
    final nb = int.tryParse(sb);
    final cmp = na != null && nb != null ? na.compareTo(nb) : sa.compareTo(sb);
    if (cmp != 0) return cmp;
  }
  return 0;
}