import 'package:flutter/material.dart'; import 'package:tdesign_flutter/tdesign_flutter.dart'; import '../../core/i18n/app_localizations.dart'; import '../../core/theme/app_colors_extension.dart'; /// 审核流处理工具。 /// /// BillSave 成功后调用,根据 [getBillAuditConfig] 返回值决定: /// - 无审核流 → 直接 return /// - 有审核流 + 自动提交 → 直接调 [onShSubmit] /// - 有审核流 + 不自动提交 → 弹窗询问,用户确认后调 [onShSubmit] /// - getBillAuditConfig 出错 → 直接 return class AuditFlowHelper { AuditFlowHelper._(); /// [getConfig] 调用 getBillAuditConfig,[onShSubmit] 调用 SHSubmit。 /// 调用方需确保 [context] 来自当前 mounted 的 widget。 static Future handle({ required BuildContext context, required AppLocalizations l10n, required Future> Function() getConfig, required Future Function() onShSubmit, }) async { final colors = Theme.of(context).extension()!; try { final config = await getConfig(); final hasFlow = config['hasAuditFlow'] == true; final autoSubmit = config['autoSubmit'] == true; if (!hasFlow) return; if (autoSubmit) { await onShSubmit(); return; } // ignore: use_build_context_synchronously final shouldSubmit = await _showDialog(colors, context, l10n); if (shouldSubmit == true) { await onShSubmit(); } } catch (_) { // getBillAuditConfig 或 SHSubmit 失败均不阻塞流程 } } static Future _showDialog( AppColorsExtension colors, BuildContext context, AppLocalizations l10n, ) { return showDialog( context: context, builder: (ctx) => TDAlertDialog( title: l10n.get('submit'), content: l10n.get('auditFlowPrompt'), buttonStyle: TDDialogButtonStyle.text, leftBtn: TDDialogButtonOptions( title: l10n.get('skipAudit'), titleColor: colors.textSecondary, action: () => Navigator.pop(ctx, false), ), rightBtn: TDDialogButtonOptions( title: l10n.get('submitToAudit'), titleColor: colors.primary, action: () => Navigator.pop(ctx, true), ), ), ); } }