anchor.diff:          return AlbumDetails(album);
         },
         closedBuilder: (context, action) {
  +        // Mimic logic from ListTile._iconColor
  +        final theme = Theme.of(context);
  +        final iconColor = theme.brightness == Brightness.light ? Colors.black45 : theme.iconTheme.color;
  +
           return Align(
             alignment: Alignment.topCenter,
             child: Material(
  
positive.code: }
  
  class Album extends StatelessWidget {
    final Directory album;
    final TextStyle titleStyle;
    final TextStyle artistStyle;
    final StrutStyle titleStrutStyle;
  
negative.code:     );
    }
  }
  
  enum AlbumAction {
    queueLast,
    queueNext,
  }
  
  _albumContextMenu(dto.Directory directory, Color? color) => PopupMenuButton<AlbumAction>(
        // Manually specify child because default IconButton comes with an excessive minimum size of 48x48
        child: Icon(Icons.adaptive.more, color: color),
        onSelected: (AlbumAction result) async {
          final Playlist playlist = getIt<Playlist>();
          final polaris.Client client = getIt<polaris.Client>();
          // TODO show some kind of UI while this is in progress (+ confirm)
          final List<dto.Song> songs = await client.flatten(directory.path);
          switch (result) {
            case AlbumAction.queueLast:
              playlist.queueLast(songs);
              break;
            case AlbumAction.queueNext:
              playlist.queueNext(songs);
              break;
            default:
              break;
          }
        },
        itemBuilder: (BuildContext context) => const <PopupMenuEntry<AlbumAction>>[
          PopupMenuItem<AlbumAction>(
            value: AlbumAction.queueLast,
            child: Text(queueLast),
          ),
          PopupMenuItem<AlbumAction>(
            value: AlbumAction.queueNext,
            child: Text(queueNext),
          ),
        ],
      );
  