getGridUiTemplate function

String getGridUiTemplate({
  1. String? className,
  2. String? isLoading,
})

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;
}