anchor.diff:    y += tableTextSize + verticalPadding * 2.0;
     for (int index = 0; index < kTrainData.length; index += 1) {
       final Train train = kTrainData[index];
  -    y += verticalPadding;
  +    train.yTop = y;
       x = window.padding.left;
       path.moveTo(x, y);
  -    train.code.paint(c, new Rect.fromLTWH(x + horizontalPadding, y + verticalPadding, columnWidths[0] - horizontalPadding * 2.0, tableTextSize));
  -    final double rowHeight = math.max(train.description.actualHeight(columnWidths[2] - horizontalPadding * 2.0), tableTextSize);
  +    y += verticalPadding;
  +    train.code.paint(c, new Rect.fromLTWH(x + horizontalPadding, y, columnWidths[0] - horizontalPadding * 2.0, tableTextSize));
  +    final double codeHeight = train.code.actualHeight(columnWidths[0] - horizontalPadding * 2.0);
  +    if (train.checked) {
  +      Paint paint = new Paint();
  +      paint.color = const Color(0xFF43A047);
  +      c.drawCircle(new Point(x + columnWidths[0] / 2.0, y + codeHeight + verticalPadding + iconSize / 2.0), iconSize / 2.0, paint);
  +    }
  +    final double rowHeight = math.max(
  +      codeHeight + horizontalPadding + iconSize,
  +      train.description.actualHeight(columnWidths[2] - horizontalPadding * 2.0)
  +    );
       x += columnWidths[0];
       if (train.image != null) {
  -      final Rect destRect = new Rect.fromLTWH(x, y, columnWidths[1], rowHeight + verticalPadding * 2.0);
  +      final Rect destRect = new Rect.fromLTWH(x, y - verticalPadding, columnWidths[1], rowHeight + verticalPadding * 2.0);
         final double sourceHeight = train.image.width.toDouble() * destRect.height / destRect.width;
         final Rect sourceRect = new Rect.fromLTWH(
           0.0,
  
positive.code:   window.render(scene);
  }
  
  void main() { 
    window.onBeginFrame = render;
    window.onMetricsChanged = window.scheduleFrame;
    window.scheduleFrame();
  }
  
negative.code:   final Text code;
    Image image;
    final Text description;
  
    bool checked = false;
  
    double yTop;
    double yBottom;
  }
  
  final List<Train> kTrainData = <Train>[
    new Train('49954', 'https://static.maerklin.de/media/bc/02/bc028d6e5f98ccaeb344118d64927edd1451859002.jpg', 'Type 100 crane car and type 817 boom tender car.'),
    new Train('26602', 'https://static.maerklin.de/media/cc/b9/ccb96e67093f188d67acb4ca97b407da1452597002.jpg', 'Class Köf II Diesel Locomotive with stake cars loaded with bricks and construction steel mats.'),
    new Train('46925', 'https://static.maerklin.de/media/ad/3f/ad3fa11c35f10737cb54320b9e5c006a1451857433.jpg', 'Set with of two stake cars transporting four brewery tanks (storage tanks).'),
    new Train('46870', 'https://static.maerklin.de/media/ed/36/ed365bf5b8c89cc63d54afa81db80df01451857433.jpg', 'Swiss Federal Railways (SBB) four-axle flat cars with telescoping covers loaded with coils.'),
    new Train('47724', 'https://static.maerklin.de/media/20/fe/20fe74d67d07417352fd08b164f271c41451859002.jpg', 'Swedish State Railways (SJ) two-axle container transport cars loaded with two "Inno freight" WoodTainer XXL containers, painted and lettered for "green cargo".'),
    new Train('47319', 'https://static.maerklin.de/media/6e/32/6e32c9c7153637b9e0d484a1958703191451859002.jpg', 'Four stake cars. One with two sets of short pipes, one with long pipes, one with steel bars, and one with I-beams.'),
  ];
  
  final Text title = new Text(
  