anchor.diff:      if (selectedIndex == 0) {
         _itemIndices = <int>[0, 1];
         scrollTo(0.0);
  -    } else if (selectedIndex == config.items.length - 1) {
  +    } else if (selectedIndex == _tabCount - 1) {
         _itemIndices = <int>[selectedIndex - 1, selectedIndex];
         scrollTo(1.0);
       } else {
         _itemIndices = <int>[selectedIndex - 1, selectedIndex, selectedIndex + 1];
         scrollTo(1.0);
       }
  +  }
  +
  +  BoundedBehavior _boundedBehavior;
  +
  +  ExtentScrollBehavior get scrollBehavior {
  +    _boundedBehavior ??= new BoundedBehavior();
  +    return _boundedBehavior;
     }
   
     Performance get _performance => config.selection._performance;
  
positive.code:   _TabBarViewState createState() => new _TabBarViewState<T>();
  }
  
  // TODO(hansmuller): horizontal scrolling should drive the TabSelection's performance.
  class _NotScrollable extends BoundedBehavior {
    bool get isScrollable => false;
  }
  
  class _TabBarViewState<T> extends PageableListState<T, TabBarView<T>> {
  
    final _NotScrollable _notScrollable = new _NotScrollable();
    ScrollBehavior createScrollBehavior() => _notScrollable;
    ExtentScrollBehavior get scrollBehavior => _notScrollable;
  
    List<int> _itemIndices = [0, 1];
    AnimationDirection _scrollDirection = AnimationDirection.forward;
  
    void _initItemIndicesAndScrollPosition() {
      final int selectedIndex = config.selection.index;
  
negative.code:       data: iconTheme,
        child: new DefaultTextStyle(
          style: textStyle,
          child: new _TabBarWrapper(
            children: tabs,
            selectedIndex: config.selection.index,
            indicatorColor: indicatorColor,
            indicatorRect: _indicatorRect.value,
            textAndIcons: textAndIcons,
            isScrollable: config.isScrollable,
            onLayoutChanged: _layoutChanged
          )
        )
      );
  