ShowWarnDialogSnippet

StandardSpaceSnippetResultSnippetPageWrapperSnippetGlobalNavigatorKeySnippetが必要

import 'package:flutter/material.dart';
 
Future<Result> showWarnDialog(String text, {Function()? onOkTapped, Function()? onCancelTapped}) async {
  Widget buildOkButton(BuildContext context) {
    return onOkTapped != null
      ? TextButton(
          onPressed: () => Navigator.of(context).pop(Result(isSucceeded: true)),
          child: const Text("Ok"),
        )
      : const SizedBox.shrink();
  }
 
  Widget buildCancelButton(BuildContext context) {
    return onCancelTapped != null
      ? TextButton(
          onPressed: () => Navigator.of(context).pop(Result(isSucceeded: false)),
          child: const Text("Cancel"),
        )
      : const SizedBox.shrink();
  }
 
  final result = await showDialog<Result>(
    barrierDismissible: false,
    context: navigatorKey.currentContext!,
    builder: (BuildContext context) {
      return SimpleDialog(
        title: Center(
          child: PageWrapper(
            child: Column(
              children: [
                const Icon(
                  Icons.warning,
                  size: 75,
                  color: Colors.red,
                ),
                const StandardSpace(),
                Column(
                  children: [
                    FittedBox(
                      child: Text(text),
                    ),
                    const StandardSpace(),
                    Row(
                      mainAxisAlignment: MainAxisAlignment.spaceBetween,
                      children: [
                        buildCancelButton(context),
                        buildOkButton(context),
                      ],
                    )
                  ]
                ),
                const StandardSpace(),
              ],
            )
          ),
        ),
      );
    },
  );
 
  return result ?? Result(isSucceeded: false);
}