|
@@ -141,17 +141,17 @@ class _ExpenseDetailPageState extends ConsumerState<ExpenseDetailPage>
|
|
|
padding: const EdgeInsets.all(16),
|
|
padding: const EdgeInsets.all(16),
|
|
|
child: Column(
|
|
child: Column(
|
|
|
children: [
|
|
children: [
|
|
|
- if (_statusLoading && _billStatus == null) ...[
|
|
|
|
|
|
|
+ if (_statusLoading) ...[
|
|
|
const Padding(
|
|
const Padding(
|
|
|
padding: EdgeInsets.symmetric(vertical: 8),
|
|
padding: EdgeInsets.symmetric(vertical: 8),
|
|
|
child: Center(child: TDLoading(size: TDLoadingSize.small, icon: TDLoadingIcon.activity)),
|
|
child: Center(child: TDLoading(size: TDLoadingSize.small, icon: TDLoadingIcon.activity)),
|
|
|
),
|
|
),
|
|
|
- const SizedBox(height: 8),
|
|
|
|
|
- ],
|
|
|
|
|
- if (_billStatus != null) ...[
|
|
|
|
|
- _buildStatusBadge(l10n),
|
|
|
|
|
- const SizedBox(height: 16),
|
|
|
|
|
],
|
|
],
|
|
|
|
|
+ Builder(builder: (ctx) {
|
|
|
|
|
+ final badge = _buildStatusBadge(l10n);
|
|
|
|
|
+ if (badge == null) return const SizedBox.shrink();
|
|
|
|
|
+ return Column(children: [badge, const SizedBox(height: 16)]);
|
|
|
|
|
+ }),
|
|
|
_buildBasicInfoSection(expense, l10n, colors),
|
|
_buildBasicInfoSection(expense, l10n, colors),
|
|
|
const SizedBox(height: 16),
|
|
const SizedBox(height: 16),
|
|
|
_buildExpenseDetailSection(expense, l10n, colors),
|
|
_buildExpenseDetailSection(expense, l10n, colors),
|
|
@@ -178,7 +178,7 @@ class _ExpenseDetailPageState extends ConsumerState<ExpenseDetailPage>
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// ═══ 状态 badge ═══
|
|
// ═══ 状态 badge ═══
|
|
|
- Widget _buildStatusBadge(AppLocalizations l10n) {
|
|
|
|
|
|
|
+ Widget? _buildStatusBadge(AppLocalizations l10n) {
|
|
|
final isClosed = _billStatus?['isClosed'] == true;
|
|
final isClosed = _billStatus?['isClosed'] == true;
|
|
|
final isTransferred = _billStatus?['isTransferred'] == true;
|
|
final isTransferred = _billStatus?['isTransferred'] == true;
|
|
|
final approvalStatus = _billStatus?['approvalStatus'] as String?;
|
|
final approvalStatus = _billStatus?['approvalStatus'] as String?;
|
|
@@ -199,7 +199,7 @@ class _ExpenseDetailPageState extends ConsumerState<ExpenseDetailPage>
|
|
|
case 'SHCOUNT2':
|
|
case 'SHCOUNT2':
|
|
|
return StatusBanner(icon: Icons.block_outlined, statusText: l10n.get('statusReviewRejected'), subText: '', color: Colors.deepOrange);
|
|
return StatusBanner(icon: Icons.block_outlined, statusText: l10n.get('statusReviewRejected'), subText: '', color: Colors.deepOrange);
|
|
|
default:
|
|
default:
|
|
|
- return const SizedBox.shrink();
|
|
|
|
|
|
|
+ return null;
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|