anchor.diff:    }
   }
   
  +/// A [ScrollView] that creates custom scroll effects using slivers.
  +///
  +/// A [CustomScrollView] lets you supply [slivers] directly to create various
  +/// scrolling effects, such as lists, grids, and expanding headers. For example,
  +/// to create a scroll view that contains an expanding app bar followed by a
  +/// list and a grid, use a list of three slivers: [SliverAppBar], [SliverList],
  +/// and [SliverGrid].
  +///
  +/// See also:
  +///
  +///  * [SliverList], which is a sliver that displays linear list of children.
  +///  * [SliverFixedExtentList], which is a more efficient sliver that displays
  +///    linear list of children that have the same extent along the scroll axis.
  +///  * [SliverGrid], which is a sliver that displays a 2D array of children.
  +///  * [SliverPadding], which is a sliver that adds blank space around another
  +///    sliver.
  +///  * [SliverAppBar], which is a sliver that displays a header that can expand
  +///    and float as the scroll view scrolls.
   class CustomScrollView extends ScrollView {
  +  /// Creates a [ScrollView] that creates custom scroll effects using slivers.
  +  ///
  +  /// If the [primary] argument is true, the [controller] must be null.
     CustomScrollView({
       Key key,
       Axis scrollDirection: Axis.vertical,
  
positive.code:     shrinkWrap: shrinkWrap,
    );
  
    final EdgeInsets padding;
  
    @override
  
negative.code:     assert(gridDelegate != null);
    }
  
    /// Creates a scrollable, 2D array of widgets with both a custom
    /// [SliverGridDelegate] and a custom [SliverChildDelegate].
    ///
    /// To use an [IndexedWidgetBuilder] callback to build children, use the
    /// [SliverChildBuilderDelegate].
    ///
    /// The [gridDelegate] and [childrenDelegate] arguments must not be null.
    GridView.custom({
      Key key,
      Axis scrollDirection: Axis.vertical,
  