anchor.diff:    }
   }
   
  +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,
  
positive.code:     setState(() {
        _tabBarSize = tabBarSize;
        _tabWidths = tabWidths;
        scrollBehavior.maxOffset =
          _tabWidths.reduce((sum, width) => sum + width) - _tabBarSize.width;
      });
    }
  
negative.code: const EdgeDims _kTabLabelPadding = const EdgeDims.symmetric(horizontal: 12.0);
  const TextStyle _kTabTextStyle = const TextStyle(textAlign: TextAlign.center);
  const int _kTabIconSize = 24;
  const double _kTabBarScrollFriction = 0.005;
  
  class TabBarParentData extends BoxParentData with
      ContainerParentDataMixin<RenderBox> { }
  