import 'package:lucide_icons_flutter/lucide_icons.dart'; 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: LucideIcons.box, 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'), ); }); } }