anchor.diff:                                   -labelRadius * math.sin(theta));
       }
   
  -    Paint primaryPaint = new Paint()
  -      ..color = primaryColor;
  -    Point currentPoint = getOffsetForTheta(theta).toPoint();
  -    canvas.drawCircle(centerPoint, 4.0, primaryPaint);
  -    canvas.drawCircle(currentPoint, labelPadding - 4.0, primaryPaint);
  -    primaryPaint.strokeWidth = 2.0;
  -    canvas.drawLine(centerPoint, currentPoint, primaryPaint);
  -
  -    double labelThetaIncrement = -_kTwoPi / labels.length;
  -    double labelTheta = math.PI / 2.0;
  -
  -    for (TextPainter label in labels) {
  -      Offset labelOffset = new Offset(-label.width / 2.0, -label.height / 2.0);
  -      label.paint(canvas, getOffsetForTheta(labelTheta) + labelOffset);
  -      labelTheta += labelThetaIncrement;
  -    }
  +    void paintLabels(List<TextPainter> labels) {
  +      double labelThetaIncrement = -_kTwoPi / labels.length;
  +      double labelTheta = math.PI / 2.0;
  +
  +      for (TextPainter label in labels) {
  +        Offset labelOffset = new Offset(-label.width / 2.0, -label.height / 2.0);
  +        label.paint(canvas, getOffsetForTheta(labelTheta) + labelOffset);
  +        labelTheta += labelThetaIncrement;
  +      }
  +    }
  +
  +    paintLabels(primaryLabels);
  +
  +    final Paint selectorPaint = new Paint()
  +      ..color = accentColor;
  +    final Point focusedPoint = getOffsetForTheta(theta).toPoint();
  +    final double focusedRadius = labelPadding - 4.0;
  +    canvas.drawCircle(centerPoint, 4.0, selectorPaint);
  +    canvas.drawCircle(focusedPoint, focusedRadius, selectorPaint);
  +    selectorPaint.strokeWidth = 2.0;
  +    canvas.drawLine(centerPoint, focusedPoint, selectorPaint);
  +
  +    final Rect focusedRect = new Rect.fromCircle(
  +      center: focusedPoint, radius: focusedRadius
  +    );
  +    canvas
  +      ..saveLayer(focusedRect, new Paint())
  +      ..clipPath(new Path()..addOval(focusedRect));
  +    paintLabels(secondaryLabels);
  +    canvas.restore();
     }
   
     @override
     bool shouldRepaint(_DialPainter oldPainter) {
  -    return oldPainter.labels != labels
  -        || oldPainter.primaryColor != primaryColor
  +    return oldPainter.primaryLabels != primaryLabels
  +        || oldPainter.secondaryLabels != secondaryLabels
  +        || oldPainter.backgroundColor != backgroundColor
  +        || oldPainter.accentColor != accentColor
           || oldPainter.theta != theta;
     }
   }
  
positive.code: }
  
  enum _TimePickerMode { hour, minute }
  
  /// A material design time picker.
  ///
  
negative.code:     _animateTo(_getThetaForTime(config.selectedTime));
    }
  
    final List<TextPainter> _hoursWhite = _initHours(Typography.white);
    final List<TextPainter> _hoursBlack = _initHours(Typography.black);
    final List<TextPainter> _minutesWhite = _initMinutes(Typography.white);
    final List<TextPainter> _minutesBlack = _initMinutes(Typography.black);
  
    @override
    Widget build(BuildContext context) {
      ThemeData themeData = Theme.of(context);
  
      Color backgroundColor;
      switch (themeData.brightness) {
        case ThemeBrightness.light:
          backgroundColor = Colors.grey[200];
          break;
        case ThemeBrightness.dark:
          backgroundColor = themeData.backgroundColor;
          break;
      }
  
      List<TextPainter> primaryLabels;
      List<TextPainter> secondaryLabels;
      switch (config.mode) {
        case _TimePickerMode.hour:
          switch (themeData.brightness) {
            case ThemeBrightness.light:
              primaryLabels = _hoursBlack;
              secondaryLabels = _hoursWhite;
              break;
            case ThemeBrightness.dark:
              primaryLabels = _hoursWhite;
              secondaryLabels = _hoursBlack;
              break;
          }
          break;
        case _TimePickerMode.minute:
          switch (themeData.brightness) {
            case ThemeBrightness.light:
              primaryLabels = _minutesBlack;
              secondaryLabels = _minutesWhite;
              break;
            case ThemeBrightness.dark:
              primaryLabels = _minutesWhite;
              secondaryLabels = _minutesBlack;
              break;
          }
          break;
      }
  
      return new GestureDetector(
        onPanStart: _handlePanStart,
        onPanUpdate: _handlePanUpdate,
        onPanEnd: _handlePanEnd,
        child: new CustomPaint(
          painter: new _DialPainter(
            primaryLabels: primaryLabels,
            secondaryLabels: secondaryLabels,
            backgroundColor: backgroundColor,
            accentColor: themeData.accentColor,
            theta: _theta.value
          )
        )
  