anchor.diff:        scrollTo(0.0);
     }
   
  -  ScrollBehavior createScrollBehavior() => new BoundedScrollBehavior();
  -  BoundedScrollBehavior get scrollBehavior => super.scrollBehavior;
  +  ScrollBehavior createScrollBehavior() => new TabBarScrollBehavior();
  +  TabBarScrollBehavior get scrollBehavior => super.scrollBehavior;
   
     void _handleTap(int tabIndex) {
       if (tabIndex != selectedIndex && onChanged != null)
  
positive.code: 
  import 'dart:math' as math;
  
  import 'package:sky/animation/scroll_behavior.dart';
  import 'package:sky/painting/text_style.dart';
  import 'package:sky/rendering/box.dart';
  
negative.code:   }
  }
  
  class TabBarScrollBehavior extends ScrollBehavior {
    TabBarScrollBehavior({ this.maxScrollOffset: 0.0 });
  
    double maxScrollOffset;
  
    Simulation release(Particle particle) {
      if (particle.velocity == 0.0 || particle.position < 0.0 || particle.position >= maxScrollOffset)
        return null;
  
      System system = new ParticleInBoxWithFriction(
        particle: particle,
        friction: _kTabBarScrollFriction,
        box: new ClosedBox(min: 0.0, max: maxScrollOffset));
      return new Simulation(system, terminationCondition: () => particle.position == 0.0);
    }
  
    double applyCurve(double scrollOffset, double scrollDelta) {
      return (scrollOffset + scrollDelta).clamp(0.0, maxScrollOffset);
    }
  }
  
  class TabBar extends Scrollable {
    TabBar({
      String key,
  