appendAll method

List<T>? appendAll(
  1. List<T> elements, {
  2. bool fromHead = false,
})

追加一个list, 并发射

Implementation

List<T>? appendAll(List<T> elements, {bool fromHead = false}) {
  if (_subject.isClosed) {
    L.w('IO在close状态下请求发送数据');
    return null;
  }

  if (elements.isEmpty && latest != null) {
    L.d('append空列表, 略过');
    return latest;
  }

  // 如果没有设置原始数据, 那么就用空列表
  latest ??= [];

  if (fromHead) {
    final List<T>? pending = latest?..insertAll(0, elements);
    // 从前面添加, 就把后面的挤出去
    if (_forceCapacity != null && pending!.length > _forceCapacity!) {
      pending.removeRange(_forceCapacity! - 1, pending.length);
    }
    _subject.add(pending);
  } else {
    final List<T>? pending = latest?..addAll(elements);
    // 从后面添加, 就把前面的挤出去
    if (_forceCapacity != null && pending!.length > _forceCapacity!) {
      pending.removeRange(0, _forceCapacity!);
    }
    _subject.add(pending);
  }
  return elements;
}