guide_common_scaffold.dart 2.79 KB
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:get/get.dart';

class GuideCommonScaffold extends StatelessWidget {
  const GuideCommonScaffold({
    super.key,
    required this.child,
    this.bottom,
    this.actions = const [],
    this.onBackPressed,
    this.showGradientBg = false,
    this.backIcon = 'assets/images/common/ic_nav_back.webp',
  });

  final Widget child;
  final Widget? bottom;
  final List<Widget> actions;
  final VoidCallback? onBackPressed;
  final bool showGradientBg;
  final String? backIcon;

  @override
  Widget build(BuildContext context) {
    final bottomInset = MediaQuery.paddingOf(context).bottom;

    return AnnotatedRegion<SystemUiOverlayStyle>(
      value: const SystemUiOverlayStyle(
        statusBarColor: Colors.transparent,
        statusBarIconBrightness: Brightness.dark,
        statusBarBrightness: Brightness.light,
        systemNavigationBarColor: Colors.transparent,
        systemNavigationBarIconBrightness: Brightness.dark,
      ),
      child: Scaffold(
        extendBodyBehindAppBar: true,
        appBar: AppBar(
          backgroundColor: Colors.transparent,
          elevation: 0,
          scrolledUnderElevation: 0,
          toolbarHeight: 44,
          leadingWidth: 52,
          leading: IconButton(
            onPressed: onBackPressed ??
                () {
                  if (Get.key.currentState?.canPop() ?? false) {
                    Get.back();
                  } else {
                    SystemNavigator.pop();
                  }
                },
            icon: Image.asset(
              backIcon ?? 'assets/images/common/ic_nav_back.webp',
              width: 24,
              height: 24,
            ),
          ),
          actions: actions,
        ),
        body: Stack(
          fit: StackFit.expand,
          children: [
            if (showGradientBg)
              const DecoratedBox(
                decoration: BoxDecoration(
                  gradient: LinearGradient(
                    begin: Alignment(0.50, -0.00),
                    end: Alignment(0.50, 1.00),

                    colors: [
                      const Color(0xFFE6DAFF),
                      const Color(0xFFECE4FF),
                      const Color(0xFFEEE6FF),
                      const Color(0xFFF8F6FF)
                    ],

                    // stops: [0, 0.33173, 0.74038, 1],
                  ),
                ),
              ),
            child,
            if (bottom != null)
              Positioned(
                left: 0,
                right: 0,
                bottom: bottomInset + 36,
                child: Material(
                  type: MaterialType.transparency,
                  child: bottom!,
                ),
              ),
          ],
        ),
      ),
    );
  }
}