diff --git a/client/test/theme/goldens/kpi_strip_a.png b/client/test/theme/goldens/kpi_strip_a.png new file mode 100644 index 0000000..6dd4739 Binary files /dev/null and b/client/test/theme/goldens/kpi_strip_a.png differ diff --git a/client/test/theme/goldens/kpi_strip_b.png b/client/test/theme/goldens/kpi_strip_b.png new file mode 100644 index 0000000..1cbe799 Binary files /dev/null and b/client/test/theme/goldens/kpi_strip_b.png differ diff --git a/client/test/theme/goldens/kpi_strip_c.png b/client/test/theme/goldens/kpi_strip_c.png new file mode 100644 index 0000000..beddce9 Binary files /dev/null and b/client/test/theme/goldens/kpi_strip_c.png differ diff --git a/client/test/theme/kpi_card_golden_test.dart b/client/test/theme/kpi_card_golden_test.dart new file mode 100644 index 0000000..036f6cd --- /dev/null +++ b/client/test/theme/kpi_card_golden_test.dart @@ -0,0 +1,79 @@ +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 阶段4(Flutter 侧):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'), + ); + }); + } +}