tileWidgets function

List<Widget> tileWidgets({
  1. required BuildContext context,
  2. required TileDimensions tileDimensions,
  3. required int widgetCount,
  4. required Widget builder(
    1. BuildContext context,
    2. int index
    ),
  5. Widget? leadingSubHeader,
  6. Widget? subHeader,
  7. Widget? leadingWidget,
})

Implementation

List<Widget> tileWidgets({
  required BuildContext context,
  required TileDimensions tileDimensions,
  required int widgetCount,
  required Widget Function(BuildContext context, int index) builder,
  Widget? leadingSubHeader,
  Widget? subHeader,
  Widget? leadingWidget
}) {
  List<Widget> widgets = <Widget>[];
  if (leadingSubHeader != null) widgets.add(leadingSubHeader);
  if (leadingWidget != null) widgets.add(leadingWidget);
  if (subHeader != null) widgets.add(subHeader);
  int rowIndex = 0;
  List<Widget> rowChildren = <Widget>[];
  for (int index = 0; index < widgetCount; index++) {
    rowChildren.add(
      builder(context, index),
    );
    rowIndex++;
    if (rowIndex > tileDimensions.elementsPerRow - 1) {
      widgets.add(
        new Container(
          height: tileDimensions.height + tileDimensions.padding,
          margin: EdgeInsets.only(left: tileDimensions.padding, right: tileDimensions.padding),
          alignment: Alignment.topCenter,
          child: Row(
            mainAxisSize: MainAxisSize.max,
            mainAxisAlignment: MainAxisAlignment.spaceBetween,
            crossAxisAlignment: CrossAxisAlignment.start,
            children: rowChildren,
          ),
        ),
      );
      rowIndex = 0;
      rowChildren = <Widget>[];
    }
  }
  if (widgetCount % tileDimensions.elementsPerRow != 0) {
    rowChildren = <Widget>[];
    for (int index = widgetCount - (widgetCount % tileDimensions.elementsPerRow); index < widgetCount; index++) {
      rowChildren.add(
        builder(context, index),
      );
    }
    for (int index = 0; index < tileDimensions.elementsPerRow - (widgetCount % tileDimensions.elementsPerRow); index++) {
      rowChildren.add(
        Container(
          height: tileDimensions.height,
          width: tileDimensions.width,
        ),
      );
    }
    widgets.add(
      new Container(
        height: tileDimensions.height + tileDimensions.padding,
        margin: EdgeInsets.only(left: tileDimensions.padding, right: tileDimensions.padding),
        alignment: Alignment.topCenter,
        child: Row(
          mainAxisSize: MainAxisSize.max,
          mainAxisAlignment: MainAxisAlignment.spaceBetween,
          crossAxisAlignment: CrossAxisAlignment.start,
          children: rowChildren,
        ),
      ),
    );
  }
  return widgets;
}