anchor.diff:      final int previousSelectedIndex = _selection.previousIndex;
   
       if (selectedIndex < previousSelectedIndex) {
  -      _itemIndices = <int>[selectedIndex, previousSelectedIndex];
  +      _updateItems(selectedIndex, previousSelectedIndex);
         _scrollDirection = AnimationDirection.reverse;
       } else {
  -      _itemIndices = <int>[previousSelectedIndex, selectedIndex];
  +      _updateItems(previousSelectedIndex, selectedIndex);
         _scrollDirection = AnimationDirection.forward;
       }
   
  
positive.code: 
      if (scrollVelocity.dx.abs() > _kMinFlingVelocity) {
        final int selectionDelta = scrollVelocity.dx > 0 ? -1 : 1;
        _selection.value = _selection.values[(_selection.index + selectionDelta).clamp(0, _tabCount - 1)];
        return new Future.value();
      }
  
      final int selectionIndex = _selection.index;
      final int settleIndex = snapScrollOffset(scrollOffset).toInt();
      if (selectionIndex > 0 && settleIndex != 1) {
        _selection.value = _selection.values[selectionIndex + (settleIndex == 2 ? 1 : -1)];
        return new Future.value();
      } else if (selectionIndex == 0 && settleIndex == 1) {
        _selection.value = _selection.values[1];
  
negative.code:     _boundedBehavior ??= new BoundedBehavior();
      return _boundedBehavior;
    }
  
    void _initSelection(TabBarSelectionState<T> selection) {
      _selection = selection;
  