anchor.diff:      // TODO loading spinner
       // TODO handle zero songs
       // TODO animate in
  -    // TODO multi-disc albums
   
       // Header
       slivers.add(SliverList(
         delegate: SliverChildListDelegate([
           Padding(
             padding: const EdgeInsets.all(16.0),
  -          child: DefaultTextStyle(
  -              style: Theme.of(context).textTheme.headline5, child: Text(widget.album.album ?? unknownAlbum)),
  +          child: Text(
  +            widget.album.album ?? unknownAlbum,
  +            style: Theme.of(context).textTheme.headline5,
  +          ),
           ),
           Padding(
             padding: const EdgeInsets.fromLTRB(16.0, 0, 16.0, 16.0),
             child: Column(
               crossAxisAlignment: CrossAxisAlignment.start,
               children: [
  -              DefaultTextStyle(
  -                  style: Theme.of(context).textTheme.bodyText2, child: Text(widget.album.artist ?? unknownArtist)),
  -              DefaultTextStyle(
  -                  style: Theme.of(context).textTheme.caption, child: Text(widget.album.year?.toString() ?? '')),
  +              Text(
  +                widget.album.artist ?? unknownArtist,
  +                style: Theme.of(context).textTheme.bodyText2,
  +              ),
  +              Text(
  +                widget.album.year?.toString() ?? '',
  +                style: Theme.of(context).textTheme.caption,
  +              ),
               ],
             ),
           ),
  
positive.code: 
      // Content
      if (_songs != null) {
        slivers.add(SliverList(
          delegate: SliverChildListDelegate(_songs.map((song) => Song(song, widget.album.artwork)).toList()),
        ));
      }
  
      return Scaffold(
  
negative.code:         physics: AlwaysScrollableScrollPhysics(parent: BouncingScrollPhysics()),
          slivers: slivers,
        ),
      );
    }
  }
  
  class DiscData {
    final int discNumber;
    final List<dto.Song> songs;
    DiscData(this.discNumber, this.songs) : assert(songs != null);
  }
  
  class Disc extends StatelessWidget {
    final DiscData discData;
    final int discCount;
    final String albumArtwork;
  
    Disc(this.discData, {this.discCount, this.albumArtwork, Key key})
        : assert(discData != null),
          assert(discCount != null),
          super(key: key);
  
    @override
    Widget build(BuildContext context) {
      var children = <Widget>[];
  
      if (discCount > 1) {
        final discNumberLabel = discData.discNumber?.toString() ?? '?';
        final isFirstDisc = discData.discNumber == 1;
        children.add(
          Padding(
            padding: EdgeInsets.fromLTRB(16, isFirstDisc ? 8 : 24, 16, 0),
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.stretch,
              children: [
                Text(
                  'Disc $discNumberLabel',
                  style: Theme.of(context).textTheme.bodyText2,
                ),
                Divider(),
              ],
            ),
          ),
        );
      }
  
      children.addAll(discData.songs.map((song) => Song(song, albumArtwork)));
  
      return Column(
        crossAxisAlignment: CrossAxisAlignment.stretch,
        children: children,
      );
    }
  }
  