anchor.diff:  }
   
   class _TabBarState<T> extends ScrollableState<TabBar<T>> implements TabBarSelectionAnimationListener {
  -
     TabBarSelectionState<T> _selection;
     bool _valueIsChanging = false;
  +  int _lastSelectedIndex = -1;
   
     void _initSelection(TabBarSelectionState<T> selection) {
       _selection?.unregisterAnimationListener(this);
  
positive.code:     if (config.labels.length == 0 || _selection == null)
        return;
  
      if (!_valueIsChanging && _selection.valueIsChanging) {
        if (config.isScrollable)
          scrollTo(_centeredTabScrollOffset(_selection.index), duration: _kTabBarScroll);
        _indicatorTween
          ..begin = _indicatorRect ?? _tabIndicatorRect(_selection.previousIndex)
          ..end = _tabIndicatorRect(_selection.index);
        _valueIsChanging = true;
      }
      Rect oldRect = _indicatorRect;
      double t = _selection.animation.value;
  
negative.code: const EdgeInsets _kTabLabelPadding = const EdgeInsets.symmetric(horizontal: 12.0);
  const double _kTabBarScrollDrag = 0.025;
  const Duration _kTabBarScroll = const Duration(milliseconds: 300);
  
  // Curves for the leading and trailing edge of the selected tab indicator.
  const Curve _kTabIndicatorLeadingCurve = const Interval(0.0, 0.6, curve: Curves.easeOut);
  const Curve _kTabIndicatorTrailingCurve = const Interval(0.3, 1.0, curve: Curves.easeIn);
  
  // The scrollOffset (velocity) provided to fling() is pixels/ms, and the
  // tolerance velocity is pixels/sec.
  