public GridView(
     Key key = null,
     Axis scrollDirection             = Axis.vertical,
     bool reverse                     = false,
     ScrollController controller      = null,
     bool?primary                     = null,
     ScrollPhysics physics            = null,
     bool shrinkWrap                  = false,
     EdgeInsetsGeometry padding       = null,
     SliverGridDelegate gridDelegate  = null,
     IndexedWidgetBuilder itemBuilder = null,
     int?itemCount                    = null,
     bool addAutomaticKeepAlives      = true,
     bool addRepaintBoundaries        = true,
     float?cacheExtent                = null
     ) : base(
         key: key,
         scrollDirection: scrollDirection,
         reverse: reverse,
         controller: controller,
         primary: primary,
         physics: physics,
         shrinkWrap: shrinkWrap,
         padding: padding,
         cacheExtent: cacheExtent
         )
 {
     this.gridDelegate = gridDelegate;
     childrenDelegate  = new SliverChildBuilderDelegate(
         itemBuilder,
         childCount: itemCount,
         addAutomaticKeepAlives: addAutomaticKeepAlives,
         addRepaintBoundaries: addRepaintBoundaries
         );
 }
 ListView(
     Key key = null,
     Axis scrollDirection                = Axis.vertical,
     bool reverse                        = false,
     ScrollController controller         = null,
     bool?primary                        = null,
     ScrollPhysics physics               = null,
     bool shrinkWrap                     = false,
     EdgeInsetsGeometry padding          = null,
     float?itemExtent                    = null,
     IndexedWidgetBuilder itemBuilder    = null,
     int?itemCount                       = null,
     bool addAutomaticKeepAlives         = true,
     bool addRepaintBoundaries           = true,
     float?cacheExtent                   = null,
     DragStartBehavior dragStartBehavior = DragStartBehavior.start,
     ScrollViewKeyboardDismissBehavior keyboardDismissBehavior = ScrollViewKeyboardDismissBehavior.manual
     ) : base(key: key,
              scrollDirection: scrollDirection,
              reverse: reverse,
              controller: controller,
              primary: primary,
              physics: physics,
              shrinkWrap: shrinkWrap,
              padding: padding,
              cacheExtent: cacheExtent,
              dragStartBehavior: dragStartBehavior,
              keyboardDismissBehavior: keyboardDismissBehavior
              )
 {
     D.assert(itemCount == null || itemCount >= 0);
     this.itemExtent  = itemExtent;
     childrenDelegate = new SliverChildBuilderDelegate(
         itemBuilder,
         childCount: itemCount,
         addAutomaticKeepAlives: addAutomaticKeepAlives,
         addRepaintBoundaries: addRepaintBoundaries
         );
 }
        ListView(
            Key key = null,
            Axis scrollDirection                  = Axis.vertical,
            bool reverse                          = false,
            ScrollController controller           = null,
            bool?primary                          = null,
            ScrollPhysics physics                 = null,
            bool shrinkWrap                       = false,
            EdgeInsetsGeometry padding            = null,
            IndexedWidgetBuilder itemBuilder      = null,
            IndexedWidgetBuilder separatorBuilder = null,
            int itemCount                         = 0,
            bool addAutomaticKeepAlives           = true,
            bool addRepaintBoundaries             = true,
            float?cacheExtent                     = null,
            DragStartBehavior dragStartBehavior   = DragStartBehavior.start,
            ScrollViewKeyboardDismissBehavior keyboardDismissBehavior = ScrollViewKeyboardDismissBehavior.manual
            ) : base(
                key: key,
                scrollDirection: scrollDirection,
                reverse: reverse,
                controller: controller,
                primary: primary,
                physics: physics,
                shrinkWrap: shrinkWrap,
                padding: padding,
                cacheExtent: cacheExtent,
                dragStartBehavior: dragStartBehavior,
                keyboardDismissBehavior: keyboardDismissBehavior
                )
        {
            D.assert(itemBuilder != null);
            D.assert(separatorBuilder != null);
            D.assert(itemCount >= 0);
            itemExtent       = null;
            childrenDelegate = new SliverChildBuilderDelegate(
                (context, index) => {
                int itemIndex = index / 2;
                Widget widget = null;
                if (index % 2 == 0)
                {
                    widget = itemBuilder(context, itemIndex);
                }
                else
                {
                    widget = separatorBuilder(context, itemIndex);
                    D.assert(() => {
                        if (widget == null)
                        {
                            throw new UIWidgetsError("separatorBuilder cannot return null.");
                        }

                        return(true);
                    });
                }
                return(widget);
            },
                childCount: _computeActualChildCount(itemCount),
                addAutomaticKeepAlives: addAutomaticKeepAlives,
                addRepaintBoundaries: addRepaintBoundaries
                );
        }