compareVersions static method

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

Compares two dotted versions numerically ("1.10.0" > "1.9.3"); a build suffix ("+12") breaks ties. Returns <0, 0 or >0 like Comparable.compareTo.

Implementation

static int compareVersions(String a, String b) {
  List<int> parts(String v) => v.split(RegExp(r"[.+\-]")).map((String p) => int.tryParse(RegExp(r"\d+").firstMatch(p)?.group(0) ?? "") ?? 0).toList();
  final List<int> x = parts(a);
  final List<int> y = parts(b);
  for (int i = 0; i < x.length || i < y.length; i++) {
    final int d = (i < x.length ? x[i] : 0) - (i < y.length ? y[i] : 0);
    if (d != 0) return d;
  }
  return 0;
}