showDialogGeneral<T> static method

Future<T?> showDialogGeneral<T>({
  1. double margin = 40,
  2. double radius = 14,
  3. Color? color,
  4. Widget? content,
  5. bool barrierDismissible = true,
  6. bool isUseTimer = false,
  7. EdgeInsetsGeometry? padding,
  8. ScrollPhysics? physics,
  9. bool isShowCloseButton = false,
  10. String? dialogName,
})

Implementation

static Future<T?> showDialogGeneral<T>({
  double margin = 40,
  double radius = 14,
  Color? color,
  Widget? content,
  bool barrierDismissible = true,
  bool isUseTimer = false,
  EdgeInsetsGeometry? padding,
  ScrollPhysics? physics,
  bool isShowCloseButton = false,
  String? dialogName,
}) async {
  Completer<T?> completer = Completer<T?>();

  Get.dialog<T>(
    WillPopScope(
      onWillPop: () => Future.value(barrierDismissible),
      child: Center(
        child: SingleChildScrollView(
          physics: physics,
          child: Material(
            color: Colors.transparent,
            child: Container(
              margin: EdgeInsets.all(margin),
              padding: isShowCloseButton ? EdgeInsets.zero : (padding ??= EdgeInsets.all(16.w)),
              width: double.infinity,
              decoration: BoxDecoration(
                color: Colors.white,
                borderRadius: BorderRadius.circular(radius),
              ),
              child: content ?? const SizedBox(),
            ),
          ),
        ),
      ),
    ),
    barrierDismissible: barrierDismissible,
    name: dialogName,
  );

  //* Timer untuk menutup dialog setelah 5 detik
  if (barrierDismissible && isUseTimer) {
    Future.delayed(const Duration(seconds: 5), () {
      if (Get.isDialogOpen!) {
        Get.back();
        if (!completer.isCompleted) {
          completer.complete();
        }
      }
    });
  }

  return completer.future;
}