buildLayoutWithImage static method
Widget
buildLayoutWithImage({
- required Widget contentWidget,
- EdgeInsetsGeometry? padding,
- dynamic cardImage,
- ImagePosition imagePosition = ImagePosition.top,
- ImageRatio imageRatio = ImageRatio.half,
- double? customImageWidth,
- double? customImageHeight,
- double? imageBorderRadius,
- BoxFit imageFit = BoxFit.cover,
- 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,
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,
),
),
),
],
);
}
}