getPresentationWidgetsCustomBodyTemplate function

String getPresentationWidgetsCustomBodyTemplate(
  1. String projectName
)

Implementation

String getPresentationWidgetsCustomBodyTemplate(String projectName) {
  return '''
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:${projectName}/core/theme/app_colors.dart';
import 'package:${projectName}/core/utils/responsive_size.dart';
import 'package:${projectName}/presentation/widgets/text_widget.dart';

import 'no_internet_widget.dart';

class CustomBody extends StatelessWidget {
  final Widget child;
  final Widget bottomNavigationBar;
  final Widget? drawer;
  final Color? backgroundColor;
  final Color? appBackgroundColor;
  final Color? statusBarColor;
  final Brightness? statusBarIconBrightness;
  final bool isLoading;
  final String? title;
  final Widget? titleWidget;
  final double? titleSpacing;
  final Widget? appBarLeading;
  final List<Widget>? actions;
  final bool centerTitle;
  final EdgeInsetsGeometry? padding;
  final Key scaffoldKey;
  final String message;

  const CustomBody({
    super.key,
    required this.child,
    this.bottomNavigationBar = const SizedBox(),
    this.drawer,
    this.backgroundColor,
    this.appBackgroundColor,
    this.statusBarColor,
    this.statusBarIconBrightness,
    this.isLoading = false,
    this.title,
    this.titleWidget,
    this.titleSpacing,
    this.appBarLeading,
    this.actions,
    this.centerTitle = true,
    this.padding,
    this.scaffoldKey = const Key("custom_body_scaffold"),
    this.message = "",
  });

  @override
  Widget build(BuildContext context) {
    return AnnotatedRegion<SystemUiOverlayStyle>(
      value: SystemUiOverlayStyle(
        statusBarColor: statusBarColor ?? Colors.transparent,
        statusBarIconBrightness: statusBarIconBrightness ?? Brightness.dark,
        statusBarBrightness: statusBarIconBrightness == Brightness.light
            ? Brightness.dark
            : Brightness.light,
      ),
      child: Scaffold(
        key: scaffoldKey,
        backgroundColor: backgroundColor ?? AppColors.background,

        /// ✅ FIX 1: Let scaffold handle keyboard properly
        resizeToAvoidBottomInset: true,
        appBar: appBarLeading != null
            ? AppBar(
                backgroundColor: appBackgroundColor ?? AppColors.background,
                title: titleWidget ??
                    TextWidget(
                      text: title ?? "",
                      textSize: 18,
                      fontWeight: FontWeight.w400,
                      color: AppColors.black,
                      isTitle: true,
                    ),
                centerTitle: centerTitle,
                titleSpacing: titleSpacing,
                leading: appBarLeading,
                actions: actions,
                scrolledUnderElevation: 0,
                surfaceTintColor: Colors.transparent,
              )
            : null,
        body: SafeArea(
          top: false,
          child: Stack(
            children: [
              Padding(
                padding: padding ?? const EdgeInsets.all(0),
                child: Container(
                  decoration: BoxDecoration(
                    color: backgroundColor ?? AppColors.white,
                    borderRadius: BorderRadius.only(
                      topLeft: Radius.circular(20.sp),
                      topRight: Radius.circular(20.sp),
                    ),
                  ),
                  child: message.isNotEmpty ? NoInternetWidget() : child,
                ),
              ),

              /// Loader Overlay
              if (isLoading)
                Container(
                  color: AppColors.black.withValues(alpha: 0.10),
                  child: Center(
                    child: CircularProgressIndicator(
                      strokeWidth: 3,
                      color: AppColors.primary,
                    ),
                  ),
                ),
            ],
          ),
        ),
        drawer: drawer,
        bottomNavigationBar: SafeArea(top: false, child: bottomNavigationBar),
      ),
    );
  }
}
''';
}