anchor.diff:        });
       });
       localState = QueueState(AudioService.queue, AudioService.currentMediaItem);
  -    // TODO autoscroll to current song?
  +    // TODO autoscroll to current song
     }
   
     @override
  
positive.code:         title: Text(queueTitle),
        ),
        body: StreamBuilder<PlaybackState>(
            // TODO number of songs and duration
            stream: AudioService.playbackStateStream,
            builder: (context, snapshot) {
              List<MediaItem>? queue = localState.queue;
              if (queue == null) {
                return Container();
              } else {
                return ReorderableListView(
                  // TODO bounce physics (https://github.com/flutter/flutter/issues/66080)
                  children: queue.map((mediaItem) {
                    final bool isCurrent = mediaItem.id == localState.mediaItem?.id;
                    final bool isPlaying = snapshot.data?.playing ?? false;
                    final onTap = () {
  
negative.code:                     AudioService.skipToQueueItem(mediaItem.id);
                    };
                    return _songWidget(context, mediaItem, isCurrent, isPlaying, onTap);
                  },
                  itemCount: queue.length,
                  onReorder: (int oldIndex, int newIndex) {
                    final int insertIndex = oldIndex > newIndex ? newIndex : newIndex - 1;
                    queue.insert(insertIndex, queue.removeAt(oldIndex));
                    setState(() {});
                    AudioService.customAction(customActionMoveQueueItem, [oldIndex, newIndex]);
                  },
                  physics: BouncingScrollPhysics(),
                );
              }
            }),
  