random method

DateTime random()

generate random date for given options

Implementation

DateTime random() {
  _randomDateOptions ??= RandomDateOptions();
  _endYear ??= DateTime.now().year + _randomDateOptions!.addYearsToCurrent;
  if (_endYear! < _startYear) {
    throw ArgumentError('Start year cannot be less then End year');
  }

  /// when start and end year are equal, add one to end year if not leapYear
  if (_startYear == _endYear) {
    if (_randomDateOptions!.excludeLeapYear && _isLeapYear(_startYear)) {
      throw ArgumentError(
          'Start and End year cannot be same when leap years are excluded');
    } else {
      var endYear = _endYear;
      if (endYear != null) {
        endYear++;
      }
      _endYear = endYear;
    }
  }
  var _random = Random();

  /// generate year
  var _randYear = _generateRandomYear();

  /// generate random month
  var _randMonthInt = _random.nextInt(12) + 1;

  /// generate random day
  var _randDay = _random.nextInt(_maxDays(_randYear, _randMonthInt));

  /// this is a valid day, month and year.
  return DateTime(_randYear, _randMonthInt, _randDay);
}