buildLayoutWithImage static method

Widget buildLayoutWithImage({
  1. required Widget contentWidget,
  2. EdgeInsetsGeometry? padding,
  3. dynamic cardImage,
  4. ImagePosition imagePosition = ImagePosition.top,
  5. ImageRatio imageRatio = ImageRatio.half,
  6. double? customImageWidth,
  7. double? customImageHeight,
  8. double? imageBorderRadius,
  9. BoxFit imageFit = BoxFit.cover,
  10. bool showLikeIcon = false,
  11. OverlayPosition likeIconPosition = OverlayPosition.topRight,
  12. IconData likeIcon = Icons.favorite,
  13. Color? likeIconColor,
  14. double likeIconSize = 24.0,
  15. bool isLiked = false,
  16. VoidCallback? onLikeTap,
  17. bool showBookmarkIcon = false,
  18. OverlayPosition bookmarkIconPosition = OverlayPosition.topLeft,
  19. IconData bookmarkIcon = Icons.bookmark,
  20. Color? bookmarkIconColor,
  21. double bookmarkIconSize = 24.0,
  22. bool isBookmarked = false,
  23. VoidCallback? onBookmarkTap,
  24. List<StatusChip>? statusChips,
})

Build layout with image if provided

Implementation

static Widget buildLayoutWithImage({
  required Widget contentWidget,
  EdgeInsetsGeometry? padding,

  // Image properties
  dynamic cardImage,
  ImagePosition imagePosition = ImagePosition.top,
  ImageRatio imageRatio = ImageRatio.half,
  double? customImageWidth,
  double? customImageHeight,
  double? imageBorderRadius,
  BoxFit imageFit = BoxFit.cover,

  // Overlay properties
  bool showLikeIcon = false,
  OverlayPosition likeIconPosition = OverlayPosition.topRight,
  IconData likeIcon = Icons.favorite,
  Color? likeIconColor,
  double likeIconSize = 24.0,
  bool isLiked = false,
  VoidCallback? onLikeTap,

  bool showBookmarkIcon = false,
  OverlayPosition bookmarkIconPosition = OverlayPosition.topLeft,
  IconData bookmarkIcon = Icons.bookmark,
  Color? bookmarkIconColor,
  double bookmarkIconSize = 24.0,
  bool isBookmarked = false,
  VoidCallback? onBookmarkTap,

  List<StatusChip>? statusChips,
}) {
  // If no image, just return content with padding
  if (cardImage == null) {
    return Padding(
      padding: padding ?? EdgeInsets.all(16.0),
      child: contentWidget,
    );
  }

  // Create image widget
  CardImage imageWidget = CardImage(
    image: cardImage,
    position: imagePosition,
    ratio: imageRatio,
    customWidth: customImageWidth,
    customHeight: customImageHeight,
    imageBorderRadius: imageBorderRadius,
    fit: imageFit,

    // Overlay properties
    showLikeIcon: showLikeIcon,
    likeIconPosition: likeIconPosition,
    likeIcon: likeIcon,
    likeIconColor: likeIconColor,
    likeIconSize: likeIconSize,
    isLiked: isLiked,
    onLikeTap: onLikeTap,

    showBookmarkIcon: showBookmarkIcon,
    bookmarkIconPosition: bookmarkIconPosition,
    bookmarkIcon: bookmarkIcon,
    bookmarkIconColor: bookmarkIconColor,
    bookmarkIconSize: bookmarkIconSize,
    isBookmarked: isBookmarked,
    onBookmarkTap: onBookmarkTap,

    statusChips: statusChips,
  );

  // Build layout based on image position
  switch (imagePosition) {
    case ImagePosition.top:
      return Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          imageWidget,
          Padding(
            padding: padding ?? EdgeInsets.all(16.0),
            child: contentWidget,
          ),
        ],
      );

    case ImagePosition.left:
      return Row(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          imageWidget,
          const SizedBox(width: 12),
          Expanded(
            child: Padding(
              padding: padding ?? EdgeInsets.all(16.0),
              child: contentWidget,
            ),
          ),
        ],
      );

    case ImagePosition.right:
      return Row(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          Expanded(
            child: Padding(
              padding: padding ?? EdgeInsets.all(16.0),
              child: contentWidget,
            ),
          ),
          const SizedBox(width: 12),
          imageWidget,
        ],
      );

    case ImagePosition.background:
      return Stack(
        children: [
          imageWidget,
          Positioned.fill(
            child: Container(
              decoration: BoxDecoration(
                gradient: LinearGradient(
                  begin: Alignment.topCenter,
                  end: Alignment.bottomCenter,
                  colors: [
                    Colors.transparent,
                    Colors.black.withOpacity(0.7),
                  ],
                ),
              ),
              padding: padding ?? EdgeInsets.all(16.0),
              child: Align(
                alignment: Alignment.bottomLeft,
                child: contentWidget,
              ),
            ),
          ),
        ],
      );
  }
}