anchor.diff:                      AudioService.skipToQueueItem(mediaItem.id);
                     };
                     return _songWidget(context, mediaItem, isCurrent, isPlaying, onTap);
  -                }).toList(),
  +                },
  +                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(),
                 );
               }
             }),
  
positive.code:       });
      });
      localState = QueueState(AudioService.queue, AudioService.currentMediaItem);
      // TODO autoscroll to current song?
    }
  
    @override
  
negative.code:         title: Text(queueTitle),
        ),
        body: StreamBuilder<PlaybackState>(
            // TODO display number of songs and total duration
            stream: AudioService.playbackStateStream,
            builder: (context, snapshot) {
              List<MediaItem>? queue = localState.queue;
              if (queue == null) {
                return Container();
              } else {
                return ReorderableListView.builder(
                  itemBuilder: (context, index) {
                    final MediaItem mediaItem = queue[index];
                    final bool isCurrent = mediaItem.id == localState.mediaItem?.id;
                    final bool isPlaying = snapshot.data?.playing ?? false;
                    final onTap = () {
  