import 'package:flutter/material.dart'; import 'package:tdesign_flutter/tdesign_flutter.dart'; import '../../core/theme/app_colors_extension.dart'; import '../../core/i18n/app_localizations.dart'; /// 提交中 loading 弹窗。 /// /// 方形卡片,上方菊花动画,下方文字。 /// 使用方式: /// ```dart /// SubmittingDialog.show(context); /// // ... 异步操作 ... /// SubmittingDialog.hide(context); /// ``` class SubmittingDialog { SubmittingDialog._(); /// 显示提交中弹窗。返回按钮可关闭(关闭后 API 请求仍在进行)。 static void show(BuildContext context) { showDialog( context: context, barrierDismissible: false, builder: (_) => _SubmittingContent(), ); } /// 关闭提交中弹窗。即使弹窗已被返回键关闭也不会抛异常。 static void hide(BuildContext context) { Navigator.of(context).maybePop(); } } class _SubmittingContent extends StatelessWidget { @override Widget build(BuildContext context) { final l10n = AppLocalizations.of(context); final colors = Theme.of(context).extension()!; return Center( child: Container( width: 120, padding: const EdgeInsets.fromLTRB(24, 28, 24, 24), decoration: BoxDecoration( color: colors.bgCard, borderRadius: BorderRadius.circular(12), ), child: Column( mainAxisSize: MainAxisSize.min, children: [ const TDLoading( size: TDLoadingSize.large, icon: TDLoadingIcon.activity, ), const SizedBox(height: 16), Text( l10n.get('submitting'), style: TextStyle( fontSize: 14, fontWeight: FontWeight.w500, color: colors.textSecondary, ), ), ], ), ), ); } }