timeLeft method

String timeLeft(
  1. DateTime due,
  2. String finishedText, {
  3. bool longDateName = false,
})

Implementation

String timeLeft(
  DateTime due,
  String finishedText, {
  bool longDateName = false,
}) {
  String retVal;

  Duration _timeUntilDue = due.difference(DateTime.now());

  int _daysUntil = _timeUntilDue.inDays;
  int _hoursUntil = _timeUntilDue.inHours - (_daysUntil * 24);
  int _minUntil =
      _timeUntilDue.inMinutes - (_daysUntil * 24 * 60) - (_hoursUntil * 60);
  int _secUntil = _timeUntilDue.inSeconds - (_minUntil * 60);
  // String s = _secUntil.toString().substring(_secUntil.toString().length - 2);
  // //Fixed Invalid Range Value
  String s = _secUntil.toString().length <= 2
      ? _secUntil.toString()
      : _secUntil.toString().substring(_secUntil.toString().length - 2);

  if (_daysUntil > 0) {
    //Check whether to return longDateName date name or not
    if (longDateName == false) {
      retVal = _daysUntil.toString() +
          " d " +
          _hoursUntil.toString() +
          " h " +
          _minUntil.toString() +
          " m " +
          s.toString() +
          " s ";
    } else {
      retVal = _daysUntil.toString() +
          " days " +
          _hoursUntil.toString() +
          " hours " +
          _minUntil.toString() +
          " minutes " +
          s.toString() +
          " seconds ";
    }
  } else if (_hoursUntil > 0) {
    if (longDateName == false) {
      retVal = _hoursUntil.toString() +
          " h " +
          _minUntil.toString() +
          " m " +
          s.toString() +
          " s ";
    } else {
      retVal = _hoursUntil.toString() +
          " hours " +
          _minUntil.toString() +
          " minutes " +
          s.toString() +
          " seconds ";
    }
  } else if (_minUntil > 0) {
    if (longDateName == false) {
      retVal = _minUntil.toString() + " m " + s.toString() + " s ";
    } else {
      retVal =
          _minUntil.toString() + " minutes " + s.toString() + " seconds ";
    }
  } else if (_secUntil > 0) {
    if (longDateName == false) {
      retVal = s.toString() + " s ";
    } else {
      retVal = s.toString() + " seconds ";
    }
  } else {
    retVal = finishedText;
  }
  return retVal;
}