anchor.diff:    /// Skip the next [_skipNext] elements when reading in the stream.
     int _skipNext = 0;
   
  -  TarHeader? _header;
  -  Stream<List<int>>? _contents;
  -  bool _listenedToContents = false;
  +  TarEntry? _current;
  +
  +  /// Whether [_current] has ever been listened to.
  +  bool _listenedToContentsOnce = false;
  +
  +  /// Whether there is an active stream that has not been fully consumed.
  +  bool _currentStreamNullOrComplete = true;
   
     /// Whether we're in the process of reading tar headers.
     bool _isReadingHeaders = false;
  
positive.code: /// individual file contents in order to minimize the amount of memory needed
  /// to read each archive where possible.
  @sealed
  class TarReader implements StreamIterator<TarHeader> {
    /// A chunked stream iterator to enable us to get our data.
    final ChunkedStreamIterator<int> _chunkedStream;
    final PaxHeaders _paxHeaders = PaxHeaders();
  
negative.code:   /// the next call to [next]. It's acceptable to not listen to [contents] at
    /// all before calling [next] again. In that case, this library will take care
    /// of draining the stream to get to the next entry.
    Stream<List<int>> get contents => current;
  
    @override
    TarEntry get current {
      final current = _current;
  
      if (current == null) {
        throw StateError('Invalid call to TarReader.current. \n'
            'Did you call and await next() and checked that it returned true?');
      }
  
      return current;
    }
  
    /// Reads the tar stream up until the beginning of the next logical file.
    ///
  