Files
jiu/client/test/theme/kpi_card_golden_test.dart
T
wangjia 8cfcb190b9 test(client): KPI 卡三主题 golden(design-distill 阶段4 Flutter 侧首个还原闸)
test/theme/kpi_card_golden_test.dart:4 张 KPI 卡 × A/B/C 三主题 golden,
产出 goldens/kpi_strip_{a,b,c}.png。验证 KpiCard 还原原型 .kpi 结构/色调
(icon 芯片 info/blue/warn/alert 分档着色、alert 值取 accent、软底随主题换)。
更新基准:flutter test --update-goldens test/theme/kpi_card_golden_test.dart

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TSKEiHsvauyxYUW2itzUXX
2026-06-25 07:01:19 +08:00

80 lines
2.7 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:jiu_client/core/theme/themes.dart';
import 'package:jiu_client/core/theme/app_tokens.g.dart';
import 'package:jiu_client/widgets/kpi_card.dart';
/// design-distill 阶段4Flutter 侧):KPI 卡组件 golden。
/// 渲染库存列表的 4 张 KPI 卡 × 三主题,产出 png 供与原型 `.kpi` 并排目检。
/// 更新基准:flutter test --update-goldens test/theme/kpi_card_golden_test.dart
void main() {
const cardW = 300.0;
Widget strip() => Padding(
padding: const EdgeInsets.all(12),
child: Row(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.start,
children: const [
SizedBox(
width: cardW,
child: KpiCard(
title: '商品总数',
value: '1284',
icon: Icons.inventory_2,
tone: KpiTone.info,
delta: '种 · 点击清筛选')),
SizedBox(width: 12),
SizedBox(
width: cardW,
child: KpiCard(
title: '在库数量',
value: '18920',
icon: Icons.warehouse_outlined,
tone: KpiTone.blue,
delta: '')),
SizedBox(width: 12),
SizedBox(
width: cardW,
child: KpiCard(
title: '库存预警',
value: '17',
icon: Icons.warning_amber,
tone: KpiTone.warn,
delta: '需补货')),
SizedBox(width: 12),
SizedBox(
width: cardW,
child: KpiCard(
title: '缺货商品',
value: '6',
icon: Icons.remove_shopping_cart,
tone: KpiTone.alert)),
],
),
);
for (final theme in ['a', 'b', 'c']) {
testWidgets('KPI strip golden · theme $theme', (tester) async {
tester.view.physicalSize = const Size(2560, 380);
tester.view.devicePixelRatio = 2.0;
addTearDown(tester.view.resetPhysicalSize);
addTearDown(tester.view.resetDevicePixelRatio);
await tester.pumpWidget(MaterialApp(
debugShowCheckedModeBanner: false,
theme: buildTheme(theme),
home: Scaffold(
backgroundColor: appTokensOf(theme).bg,
body: Align(alignment: Alignment.topCenter, child: strip()),
),
));
await tester.pumpAndSettle();
await expectLater(
find.byType(MaterialApp),
matchesGoldenFile('goldens/kpi_strip_$theme.png'),
);
});
}
}