compareVersions function
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;
}