getGridUiTemplate function
Implementation
String getGridUiTemplate({String? className, String? isLoading}) {
final ds = r'$';
final body = '''
GridView.builder(
padding: EdgeInsets.all(20.sp),
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
childAspectRatio: 0.75,
crossAxisSpacing: 15.sp,
mainAxisSpacing: 15.sp,
),
itemCount: 10,
itemBuilder: (context, index) {
return Container(
decoration: BoxDecoration(
color: AppColors.white,
borderRadius: BorderRadius.circular(20.sp),
boxShadow: [
BoxShadow(
color: AppColors.black.withOpacity(0.04),
blurRadius: 10,
offset: const Offset(0, 5),
),
],
),
child: Stack(
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
// Image Area
Expanded(
child: Container(
width: double.infinity,
decoration: BoxDecoration(
color: AppColors.background,
borderRadius: BorderRadius.vertical(top: Radius.circular(20.sp)),
),
child: Center(
child: Icon(Icons.grid_view_rounded, color: AppColors.primary.withOpacity(0.2), size: 40.sp),
),
),
),
// Content Area
Padding(
padding: EdgeInsets.all(12.sp),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
TextWidget(
text: "Product Item ${ds}index",
textSize: 14.sp,
fontWeight: FontWeight.bold,
color: AppColors.textPrimary,
),
SizedBox(height: 4.sp),
TextWidget(
text: "Luxury Category",
textSize: 11.sp,
color: AppColors.grey,
),
SizedBox(height: 8.sp),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
TextWidget(
text: "${ds}{(index + 1) * 25}.00 (USD)",
textSize: 15.sp,
fontWeight: FontWeight.w800,
color: AppColors.primary,
),
],
),
],
),
),
],
),
// Top Badge
Positioned(
top: 10.sp,
left: 10.sp,
child: Container(
padding: EdgeInsets.symmetric(horizontal: 8.sp, vertical: 4.sp),
decoration: BoxDecoration(
color: AppColors.primary,
borderRadius: BorderRadius.circular(8.sp),
),
child: TextWidget(
text: "NEW",
color: AppColors.white,
textSize: 9.sp,
fontWeight: FontWeight.bold,
),
),
),
// Bottom Add Button
Positioned(
bottom: 10.sp,
right: 10.sp,
child: Container(
width: 35.sp,
height: 35.sp,
decoration: const BoxDecoration(
color: AppColors.primary,
shape: BoxShape.circle,
),
child: Center(
child: Icon(Icons.add, color: AppColors.white, size: 20.sp),
),
),
),
],
),
);
},
)''';
if (className != null) {
return '''CustomBody(
title: "$className",
isLoading: ${isLoading ?? 'false'},
appBarLeading: const BackButton(),
child: $body
)''';
}
return body;
}