calculateGridFeedHeight static method

double calculateGridFeedHeight(
  1. {VideoFeedConfiguration? videoFeedConfiguration,
  2. required int rows,
  3. required int columns,
  4. required double width}
)

Calculate the grid feed height.

videoFeedConfiguration is the configuration of the feed. rows is the number of the grid feed rows. columns is the number of the grid feed columns. width is the grid feed width.

Implementation

static double calculateGridFeedHeight({
  VideoFeedConfiguration? videoFeedConfiguration,
  required int rows,
  required int columns,
  required double width,
}) {
  if (defaultTargetPlatform == TargetPlatform.iOS) {
    final contentPadding = videoFeedConfiguration?.contentPadding ??
        VideoFeedPadding(
          top: 10,
          right: 10,
          bottom: 10,
          left: 10,
        );
    final itemSpacing = videoFeedConfiguration?.itemSpacing ?? 10;
    final aspectRatio = videoFeedConfiguration?.aspectRatio ?? (4 / 6);
    final horizontalMargin =
        (contentPadding.left ?? 10) + (contentPadding.right ?? 10);
    final verticalMargin =
        (contentPadding.top ?? 10) + (contentPadding.bottom ?? 10);
    final totalHorizontalSpacing = (columns - 1) * itemSpacing;
    final totalVerticalSpacing = (rows - 1) * itemSpacing;

    final availableItemWidth =
        width - (totalHorizontalSpacing + horizontalMargin);
    final singleItemWidth = availableItemWidth / columns;
    final singleItemHeight = singleItemWidth / aspectRatio;
    final feedHeight =
        singleItemHeight * rows + totalVerticalSpacing + verticalMargin;

    return feedHeight.ceilToDouble();
  } else {
    final itemSpacing = videoFeedConfiguration?.itemSpacing ?? 8;
    final contentPadding = VideoFeedPadding(
      top: itemSpacing / 2,
      right: itemSpacing / 2,
      bottom: itemSpacing / 2,
      left: itemSpacing / 2,
    );
    const aspectRatio = 9 / 16;
    final horizontalMargin =
        (contentPadding.left ?? 4) + (contentPadding.right ?? 4);
    final verticalMargin =
        (contentPadding.top ?? 4) + (contentPadding.bottom ?? 4);
    final totalHorizontalSpacing = (columns - 1) * itemSpacing;
    final totalVerticalSpacing = (rows - 1) * itemSpacing;

    final availableItemWidth =
        width - totalHorizontalSpacing - horizontalMargin;
    final singleItemWidth = availableItemWidth / columns;
    double singleItemHeight = 0;
    if (videoFeedConfiguration?.titlePosition ==
        VideoFeedTitlePosition.stacked) {
      singleItemHeight = (singleItemWidth / aspectRatio) + 30;
    } else {
      singleItemHeight = singleItemWidth / aspectRatio;
    }

    final feedHeight =
        singleItemHeight * rows + totalVerticalSpacing + verticalMargin;

    return feedHeight.ceilToDouble();
  }
}