anchor.diff:    Size _tabBarSize;
     List<double> _tabWidths;
     Rect _indicatorRect;
  -  RectTween _indicatorTween = new RectTween();
  +  RectTween _indicatorTween;
   
     Rect _tabRect(int tabIndex) {
       assert(_tabBarSize != null);
  
positive.code:       return;
  
      if (_lastSelectedIndex != _selection.index) {
        // Initialize our indicator animation when we change selected tabs.
        if (config.isScrollable)
          scrollTo(_centeredTabScrollOffset(_selection.index), duration: _kTabBarScroll);
        _indicatorTween
          ..begin = _indicatorRect ?? _tabIndicatorRect(_selection.previousIndex)
          ..end = _tabIndicatorRect(_selection.index);
        _valueIsChanging = true;
        _lastSelectedIndex = _selection.index;
      }
      Rect oldRect = _indicatorRect;
      double t = _selection.animation.value;
      if (_valueIsChanging) {
        // When _valueIsChanging is true, we're animating based on a ticker and
        // want to curve the animation. When _valueIsChanging is false, we're
        // animating based on a pointer event and want linear feedback. It's
        // possible we should move this curve into the selection animation.
        // We animate the leading and trailing edges of the rect differently.
        // The easiest way to do this is to lerp 2 rects, and piece them together
        // into 1.
        Rect leftRect, rightRect;
        if (_selection.index > _selection.previousIndex) {
          // Moving to the right - right edge is leading.
  
negative.code:       _indicatorRect = new Rect.fromLTRB(
          leftRect.left, leftRect.top, rightRect.right, rightRect.bottom
        );
      }
      if (oldRect != _indicatorRect)
        setState(() { /* The indicator rect has changed. */ });
  