compareToVersionName method

int compareToVersionName(
  1. String newVersionName
)

Implementation

int compareToVersionName(String newVersionName) {
  String oldVersionName = mxText;
  int res = 0;

  List<String> oldNumbers = oldVersionName.split('.');
  List<String> newNumbers = newVersionName.split('.');

  // To avoid IndexOutOfBounds
  int maxIndex = (oldNumbers.length < newNumbers.length)
      ? oldNumbers.length
      : newNumbers.length;

  for (int i = 0; i < maxIndex; i++) {
    int oldVersionPart = int.parse(oldNumbers[i]);
    int newVersionPart = int.parse(newNumbers[i]);

    if (oldVersionPart < newVersionPart) {
      res = -1;
      break;
    } else if (oldVersionPart > newVersionPart) {
      res = 1;
      break;
    }
  }

  // If versions are the same so far, but they have different length...
  if (res == 0 && oldNumbers.length != newNumbers.length) {
    res = (oldNumbers.length > newNumbers.length) ? 1 : -1;
    //check if remaining parts are all zeros.
    if (oldNumbers.length > newNumbers.length) {
      for (int i = maxIndex; i < oldNumbers.length; i++) {
        if (int.parse(oldNumbers[i]) != 0) {
          return 1; //old version is greater
        }
      }
      return 0; // All remaining parts of oldVersion are 0
    } else {
      for (int i = maxIndex; i < newNumbers.length; i++) {
        if (int.parse(newNumbers[i]) != 0) {
          return -1; //newVersion is greater
        }
      }
      return 0; // All remaining parts of newVersion are 0
    }
  }

  return res;
}