add method Null safety

bool add(
  1. T element

Add a single element to the collection.

Returns true if the addition was successful. In case of failure it will either return false (if sortingEnforcement == SortingEnforcement.skipWrongItems) or it will throw GpsPointsViewSortingException (if sortingEnforcement == SortingEnforcement.throwIfWrongItems).


bool add(T element) {
  try {
    // [GpcCompact] and subclasses have very fast comparison operations for
    // items that are in the list. It is therefore cheaper to not first check
    // if the new item is valid, but rather add it to the list, check if that
    // makes the list invalid, and rollback if necessary. This is of course
    // for the common case where additions are typically valid, because if
    // incoming data is mostly invalid the add-and-rollback combo may be more
    // expensive.

    // For the non-empty list, we need to take into consideration sorting
    // requirements.
    if (length <= 1) {
      return true;
    } else {
      // If it's already not sorted by time, we don't have to check anything, so
      // only do further checks if currently sorted.
      if (sortedByTime) {
        final comparison = compareElementTime(length - 2, length - 1);
        switch (comparison) {
          case TimeComparisonResult.before:
            return true;
          case TimeComparisonResult.same:
          case TimeComparisonResult.after:
          case TimeComparisonResult.overlapping:
            // Disallow adding unsorted item if configured to force sorting.
            if (sortingEnforcement != SortingEnforcement.notRequired) {
              throw GpsPointsViewSortingException(
                  'Adding element ${this[length - 1]} after ${this[length - 2]} would make the list unsorted!');
            _sortedByTime = false;
            return true;
  } on GpsPointsViewSortingException {
    if (sortingEnforcement == SortingEnforcement.throwIfWrongItems) {
    } // otherwise we just skip the item, silently
    return false;
  return false;