Remove ScrollableListPainter (#3226)

* Remove ScrollableListPainter
diff --git a/packages/flutter/lib/src/material/tabs.dart b/packages/flutter/lib/src/material/tabs.dart
index a8d74ee..7451a77 100644
--- a/packages/flutter/lib/src/material/tabs.dart
+++ b/packages/flutter/lib/src/material/tabs.dart
@@ -1075,7 +1075,6 @@
       itemsWrap: config.itemsWrap,
       mainAxis: config.scrollDirection,
       startOffset: scrollOffset,
-      overlayPainter: config.scrollableListPainter,
       children: _items
     );
   }
diff --git a/packages/flutter/lib/src/rendering/block.dart b/packages/flutter/lib/src/rendering/block.dart
index 7c900af..8ad17f4 100644
--- a/packages/flutter/lib/src/rendering/block.dart
+++ b/packages/flutter/lib/src/rendering/block.dart
@@ -6,7 +6,6 @@
 
 import 'box.dart';
 import 'object.dart';
-import 'viewport.dart';
 
 /// Parent data for use with [RenderBlockBase].
 class BlockParentData extends ContainerBoxParentDataMixin<RenderBox> { }
@@ -25,8 +24,7 @@
 /// viewport with a scrolling direction that matches the block's main axis.
 class RenderBlock extends RenderBox
     with ContainerRenderObjectMixin<RenderBox, BlockParentData>,
-         RenderBoxContainerDefaultsMixin<RenderBox, BlockParentData>
-    implements HasMainAxis {
+         RenderBoxContainerDefaultsMixin<RenderBox, BlockParentData> {
 
   RenderBlock({
     List<RenderBox> children,
@@ -42,7 +40,6 @@
   }
 
   /// The direction to use as the main axis.
-  @override
   Axis get mainAxis => _mainAxis;
   Axis _mainAxis;
   void set mainAxis (Axis value) {
diff --git a/packages/flutter/lib/src/rendering/viewport.dart b/packages/flutter/lib/src/rendering/viewport.dart
index ebb6d8d..a260c52 100644
--- a/packages/flutter/lib/src/rendering/viewport.dart
+++ b/packages/flutter/lib/src/rendering/viewport.dart
@@ -73,18 +73,12 @@
   String toString() => 'ViewportDimensions(container: $containerSize, content: $contentSize)';
 }
 
-/// An interface that indicates that an object has a scroll direction.
-abstract class HasMainAxis {
-  /// Whether this object scrolls horizontally or vertically.
-  Axis get mainAxis;
-}
-
 /// A base class for render objects that are bigger on the inside.
 ///
 /// This class holds the common fields for viewport render objects but does not
 /// have a child model. See [RenderViewport] for a viewport with a single child
 /// and [RenderVirtualViewport] for a viewport with multiple children.
-class RenderViewportBase extends RenderBox implements HasMainAxis {
+class RenderViewportBase extends RenderBox {
   RenderViewportBase(
     Offset paintOffset,
     Axis mainAxis,
@@ -128,7 +122,6 @@
   /// The child is given layout constraints that are fully unconstrainted along
   /// the main axis (e.g., the child can be as tall as it wants if the main axis
   /// is vertical).
-  @override
   Axis get mainAxis => _mainAxis;
   Axis _mainAxis;
   void set mainAxis(Axis value) {
diff --git a/packages/flutter/lib/src/widgets/pageable_list.dart b/packages/flutter/lib/src/widgets/pageable_list.dart
index ebe5c4c..b9d177e 100644
--- a/packages/flutter/lib/src/widgets/pageable_list.dart
+++ b/packages/flutter/lib/src/widgets/pageable_list.dart
@@ -35,7 +35,6 @@
     this.itemsWrap: false,
     this.itemsSnapAlignment: PageableListFlingBehavior.stopAtNextPage,
     this.onPageChanged,
-    this.scrollableListPainter,
     this.duration: const Duration(milliseconds: 200),
     this.curve: Curves.ease,
     this.children
@@ -61,9 +60,6 @@
   /// Called when the currently visible page changes.
   final ValueChanged<int> onPageChanged;
 
-  /// Used to paint the scrollbar for this list.
-  final ScrollableListPainter scrollableListPainter;
-
   /// The duration used when animating to a given page.
   final Duration duration;
 
@@ -146,7 +142,6 @@
   }
 
   void _updateScrollBehavior() {
-    config.scrollableListPainter?.contentExtent = _itemCount.toDouble();
     didUpdateScrollBehavior(scrollBehavior.updateExtents(
       contentExtent: _itemCount.toDouble(),
       containerExtent: 1.0,
@@ -155,31 +150,12 @@
   }
 
   @override
-  void dispatchOnScrollStart() {
-    super.dispatchOnScrollStart();
-    config.scrollableListPainter?.scrollStarted();
-  }
-
-  @override
-  void dispatchOnScroll() {
-    super.dispatchOnScroll();
-    config.scrollableListPainter?.scrollOffset = scrollOffset;
-  }
-
-  @override
-  void dispatchOnScrollEnd() {
-    super.dispatchOnScrollEnd();
-    config.scrollableListPainter?.scrollEnded();
-  }
-
-  @override
   Widget buildContent(BuildContext context) {
     return new PageViewport(
       itemsWrap: config.itemsWrap,
       mainAxis: config.scrollDirection,
       anchor: config.scrollAnchor,
       startOffset: scrollOffset,
-      overlayPainter: config.scrollableListPainter,
       children: config.children
     );
   }
diff --git a/packages/flutter/lib/src/widgets/scrollable.dart b/packages/flutter/lib/src/widgets/scrollable.dart
index 6f3e742..7962ccc 100644
--- a/packages/flutter/lib/src/widgets/scrollable.dart
+++ b/packages/flutter/lib/src/widgets/scrollable.dart
@@ -8,7 +8,6 @@
 
 import 'package:newton/newton.dart';
 import 'package:flutter/gestures.dart';
-import 'package:flutter/rendering.dart' show HasMainAxis;
 
 import 'basic.dart';
 import 'framework.dart';
@@ -764,100 +763,3 @@
     );
   }
 }
-
-abstract class ScrollableListPainter extends RenderObjectPainter {
-  @override
-  void attach(RenderObject renderObject) {
-    assert(renderObject is RenderBox);
-    assert(renderObject is HasMainAxis);
-    super.attach(renderObject);
-  }
-
-  @override
-  RenderBox get renderObject => super.renderObject;
-
-  Axis get scrollDirection {
-    HasMainAxis scrollable = renderObject as dynamic;
-    return scrollable?.mainAxis;
-  }
-
-  Size get viewportSize => renderObject.size;
-
-  double get contentExtent => _contentExtent;
-  double _contentExtent = 0.0;
-  void set contentExtent (double value) {
-    assert(value != null);
-    assert(value >= 0.0);
-    if (_contentExtent == value)
-      return;
-    _contentExtent = value;
-    renderObject?.markNeedsPaint();
-  }
-
-  double get scrollOffset => _scrollOffset;
-  double _scrollOffset = 0.0;
-  void set scrollOffset (double value) {
-    assert(value != null);
-    if (_scrollOffset == value)
-      return;
-    _scrollOffset = value;
-    renderObject?.markNeedsPaint();
-  }
-
-  /// Called when a scroll starts. Subclasses may override this method to
-  /// initialize some state or to play an animation.
-  void scrollStarted() { }
-
-  /// Similar to scrollStarted(). Called when a scroll ends. For fling scrolls
-  /// "ended" means that the scroll animation either stopped of its own accord
-  /// or was canceled  by the user.
-  void scrollEnded() { }
-}
-
-class CompoundScrollableListPainter extends ScrollableListPainter {
-  CompoundScrollableListPainter(this.painters);
-
-  final List<ScrollableListPainter> painters;
-
-  @override
-  void attach(RenderObject renderObject) {
-    for(ScrollableListPainter painter in painters)
-      painter.attach(renderObject);
-  }
-
-  @override
-  void detach() {
-    for(ScrollableListPainter painter in painters)
-      painter.detach();
-  }
-
-  @override
-  void set contentExtent (double value) {
-    for(ScrollableListPainter painter in painters)
-      painter.contentExtent = value;
-  }
-
-  @override
-  void paint(PaintingContext context, Offset offset) {
-    for(ScrollableListPainter painter in painters)
-      painter.paint(context, offset);
-  }
-
-  @override
-  void set scrollOffset (double value) {
-    for(ScrollableListPainter painter in painters)
-      painter.scrollOffset = value;
-  }
-
-  @override
-  void scrollStarted() {
-    for(ScrollableListPainter painter in painters)
-      painter.scrollStarted();
-  }
-
-  @override
-  void scrollEnded() {
-    for(ScrollableListPainter painter in painters)
-      painter.scrollEnded();
-  }
-}
diff --git a/packages/flutter/lib/src/widgets/scrollable_list.dart b/packages/flutter/lib/src/widgets/scrollable_list.dart
index 2631847..1ad36e5 100644
--- a/packages/flutter/lib/src/widgets/scrollable_list.dart
+++ b/packages/flutter/lib/src/widgets/scrollable_list.dart
@@ -23,7 +23,6 @@
     this.itemsWrap: false,
     this.clampOverscrolls: false,
     this.padding,
-    this.scrollableListPainter,
     this.children
   }) : super(
     key: key,
@@ -40,7 +39,6 @@
   final bool itemsWrap;
   final bool clampOverscrolls;
   final EdgeInsets padding;
-  final ScrollableListPainter scrollableListPainter;
   final Iterable<Widget> children;
 
   @override
@@ -55,7 +53,6 @@
   ExtentScrollBehavior get scrollBehavior => super.scrollBehavior;
 
   void _handleExtentsChanged(double contentExtent, double containerExtent) {
-    config.scrollableListPainter?.contentExtent = contentExtent;
     setState(() {
       didUpdateScrollBehavior(scrollBehavior.updateExtents(
         contentExtent: config.itemsWrap ? double.INFINITY : contentExtent,
@@ -66,18 +63,6 @@
   }
 
   @override
-  void dispatchOnScrollStart() {
-    super.dispatchOnScrollStart();
-    config.scrollableListPainter?.scrollStarted();
-  }
-
-  @override
-  void dispatchOnScroll() {
-    super.dispatchOnScroll();
-    config.scrollableListPainter?.scrollOffset = scrollOffset;
-  }
-
-  @override
   Widget buildContent(BuildContext context) {
     final double listScrollOffset = config.clampOverscrolls
       ? scrollOffset.clamp(scrollBehavior.minScrollOffset, scrollBehavior.maxScrollOffset)
@@ -90,7 +75,6 @@
       itemExtent: config.itemExtent,
       itemsWrap: config.itemsWrap,
       padding: config.padding,
-      overlayPainter: config.scrollableListPainter,
       children: config.children
     );
   }
@@ -302,8 +286,7 @@
     this.itemExtent,
     this.itemCount,
     this.itemBuilder,
-    this.padding,
-    this.scrollableListPainter
+    this.padding
   }) : super(
     key: key,
     initialScrollOffset: initialScrollOffset,
@@ -321,7 +304,6 @@
   final int itemCount;
   final ItemListBuilder itemBuilder;
   final EdgeInsets padding;
-  final ScrollableListPainter scrollableListPainter;
 
   @override
   ScrollableState createState() => new _ScrollableLazyListState();
@@ -335,7 +317,6 @@
   ExtentScrollBehavior get scrollBehavior => super.scrollBehavior;
 
   void _handleExtentsChanged(double contentExtent, double containerExtent) {
-    config.scrollableListPainter?.contentExtent = contentExtent;
     setState(() {
       didUpdateScrollBehavior(scrollBehavior.updateExtents(
         contentExtent: contentExtent,
@@ -346,24 +327,6 @@
   }
 
   @override
-  void dispatchOnScrollStart() {
-    super.dispatchOnScrollStart();
-    config.scrollableListPainter?.scrollStarted();
-  }
-
-  @override
-  void dispatchOnScroll() {
-    super.dispatchOnScroll();
-    config.scrollableListPainter?.scrollOffset = scrollOffset;
-  }
-
-  @override
-  void dispatchOnScrollEnd() {
-    super.dispatchOnScrollEnd();
-    config.scrollableListPainter?.scrollEnded();
-  }
-
-  @override
   Widget buildContent(BuildContext context) {
     return new LazyListViewport(
       onExtentsChanged: _handleExtentsChanged,
@@ -373,8 +336,7 @@
       itemExtent: config.itemExtent,
       itemCount: config.itemCount,
       itemBuilder: config.itemBuilder,
-      padding: config.padding,
-      overlayPainter: config.scrollableListPainter
+      padding: config.padding
     );
   }
 }