dialog.dart 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. /// 对话框工具:统一封装弹窗(扫码、确认、通用)
  2. library;
  3. import 'package:flutter/material.dart';
  4. /// 打开对话框
  5. /// - [builder] 构建弹窗内容
  6. /// - [onSubmit] 点确认/提交时回调,返回 true 表示立即关闭,false 保持打开
  7. /// - [confirmText] 确认按钮文案
  8. /// - [barrierDismissible] 点击遮罩是否可关闭
  9. Future<void> openDialog(
  10. BuildContext context, {
  11. required WidgetBuilder builder,
  12. bool Function()? onSubmit,
  13. String? confirmText,
  14. bool barrierDismissible = true,
  15. }) {
  16. return showDialog<void>(
  17. context: context,
  18. barrierDismissible: barrierDismissible,
  19. builder: (dialogContext) {
  20. return AlertDialog(
  21. content: builder(dialogContext),
  22. actions: onSubmit == null
  23. ? null
  24. : [
  25. TextButton(
  26. onPressed: () {
  27. if (onSubmit() == true) {
  28. Navigator.of(dialogContext).pop();
  29. }
  30. },
  31. child: Text(confirmText ?? '确定'),
  32. ),
  33. ],
  34. );
  35. },
  36. );
  37. }
  38. /// 简单确认弹窗
  39. Future<bool> showConfirmDialog(
  40. BuildContext context, {
  41. required String title,
  42. required String message,
  43. String confirmText = '确定',
  44. String cancelText = '取消',
  45. }) async {
  46. final result = await showDialog<bool>(
  47. context: context,
  48. builder: (dialogContext) => AlertDialog(
  49. title: Text(title),
  50. content: Text(message),
  51. actions: [
  52. TextButton(
  53. onPressed: () => Navigator.of(dialogContext).pop(false),
  54. child: Text(cancelText),
  55. ),
  56. TextButton(
  57. onPressed: () => Navigator.of(dialogContext).pop(true),
  58. child: Text(confirmText),
  59. ),
  60. ],
  61. ),
  62. );
  63. return result ?? false;
  64. }