diff --git a/client/lib/screens/stock_in/stock_in_form_screen.dart b/client/lib/screens/stock_in/stock_in_form_screen.dart index 2ac969f..8d11b3d 100644 --- a/client/lib/screens/stock_in/stock_in_form_screen.dart +++ b/client/lib/screens/stock_in/stock_in_form_screen.dart @@ -1024,7 +1024,7 @@ class _StockInFormScreenState extends ConsumerState { children: [ IntrinsicHeight( child: Container( - color: index.isEven ? Colors.white : const Color(0xFFFAFAFA), + color: index.isEven ? context.tokens.surface : context.tokens.bg, child: Row(crossAxisAlignment: CrossAxisAlignment.center, children: [ SizedBox( diff --git a/client/lib/screens/stock_out/stock_out_form_screen.dart b/client/lib/screens/stock_out/stock_out_form_screen.dart index e3d6f81..7593411 100644 --- a/client/lib/screens/stock_out/stock_out_form_screen.dart +++ b/client/lib/screens/stock_out/stock_out_form_screen.dart @@ -757,7 +757,7 @@ class _StockOutFormScreenState extends ConsumerState { return TableRow( decoration: BoxDecoration( - color: index.isEven ? Colors.white : const Color(0xFFFAFAFA), + color: index.isEven ? context.tokens.surface : context.tokens.bg, ), children: [ // 序号 diff --git a/client/test/golden/goldens/stock_in_form_a.png b/client/test/golden/goldens/stock_in_form_a.png new file mode 100644 index 0000000..fdce55a Binary files /dev/null and b/client/test/golden/goldens/stock_in_form_a.png differ diff --git a/client/test/golden/goldens/stock_in_form_b.png b/client/test/golden/goldens/stock_in_form_b.png new file mode 100644 index 0000000..f02b0e4 Binary files /dev/null and b/client/test/golden/goldens/stock_in_form_b.png differ diff --git a/client/test/golden/goldens/stock_in_form_c.png b/client/test/golden/goldens/stock_in_form_c.png new file mode 100644 index 0000000..d4f6087 Binary files /dev/null and b/client/test/golden/goldens/stock_in_form_c.png differ diff --git a/client/test/golden/goldens/stock_in_form_mobile_a.png b/client/test/golden/goldens/stock_in_form_mobile_a.png new file mode 100644 index 0000000..8ec265b Binary files /dev/null and b/client/test/golden/goldens/stock_in_form_mobile_a.png differ diff --git a/client/test/golden/goldens/stock_in_form_mobile_b.png b/client/test/golden/goldens/stock_in_form_mobile_b.png new file mode 100644 index 0000000..8e97110 Binary files /dev/null and b/client/test/golden/goldens/stock_in_form_mobile_b.png differ diff --git a/client/test/golden/goldens/stock_in_form_mobile_c.png b/client/test/golden/goldens/stock_in_form_mobile_c.png new file mode 100644 index 0000000..af58984 Binary files /dev/null and b/client/test/golden/goldens/stock_in_form_mobile_c.png differ diff --git a/client/test/golden/goldens/stock_out_form_a.png b/client/test/golden/goldens/stock_out_form_a.png new file mode 100644 index 0000000..ec411b9 Binary files /dev/null and b/client/test/golden/goldens/stock_out_form_a.png differ diff --git a/client/test/golden/goldens/stock_out_form_b.png b/client/test/golden/goldens/stock_out_form_b.png new file mode 100644 index 0000000..79df1a1 Binary files /dev/null and b/client/test/golden/goldens/stock_out_form_b.png differ diff --git a/client/test/golden/goldens/stock_out_form_c.png b/client/test/golden/goldens/stock_out_form_c.png new file mode 100644 index 0000000..595dc99 Binary files /dev/null and b/client/test/golden/goldens/stock_out_form_c.png differ diff --git a/client/test/golden/goldens/stock_out_form_mobile_a.png b/client/test/golden/goldens/stock_out_form_mobile_a.png new file mode 100644 index 0000000..594eaa2 Binary files /dev/null and b/client/test/golden/goldens/stock_out_form_mobile_a.png differ diff --git a/client/test/golden/goldens/stock_out_form_mobile_b.png b/client/test/golden/goldens/stock_out_form_mobile_b.png new file mode 100644 index 0000000..b79a64c Binary files /dev/null and b/client/test/golden/goldens/stock_out_form_mobile_b.png differ diff --git a/client/test/golden/goldens/stock_out_form_mobile_c.png b/client/test/golden/goldens/stock_out_form_mobile_c.png new file mode 100644 index 0000000..80c9bd8 Binary files /dev/null and b/client/test/golden/goldens/stock_out_form_mobile_c.png differ diff --git a/client/test/golden/stock_in_form_golden_test.dart b/client/test/golden/stock_in_form_golden_test.dart new file mode 100644 index 0000000..093f1f7 --- /dev/null +++ b/client/test/golden/stock_in_form_golden_test.dart @@ -0,0 +1,88 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:jiu_client/core/models/page_result.dart'; +import 'package:jiu_client/core/auth/auth_state.dart'; +import 'package:jiu_client/models/partner.dart'; +import 'package:jiu_client/models/warehouse.dart'; +import 'package:jiu_client/models/product_option.dart'; +import 'package:jiu_client/providers/warehouse_provider.dart'; +import 'package:jiu_client/providers/partner_provider.dart'; +import 'package:jiu_client/providers/product_option_provider.dart'; +import 'package:jiu_client/screens/stock_in/stock_in_form_screen.dart'; + +import '../support/golden_harness.dart'; + +/// design-distill 阶段4:入库录单表单(旗舰屏)golden × 三主题。 +/// 锁住 单据信息卡 + 可编辑明细网格 + 底栏 随主题换色(含斑马行 token)。 +/// 更新基准:flutter test --update-goldens test/golden/stock_in_form_golden_test.dart + +const _warehouses = [ + Warehouse(id: 1, name: '主仓', isDefault: true), + Warehouse(id: 2, name: '二号仓', isDefault: false), +]; + +class _FakeWarehouses extends WarehouseListNotifier { + @override + Future> build() async => _warehouses; +} + +class _FakeSuppliers extends PartnerListNotifier { + @override + Future> build() async => + const PageResult(data: [], total: 0, page: 1, pageSize: 20); + @override + void setPage(int page) {} + @override + void setPageSize(int pageSize) {} + @override + void setKeyword(String keyword) {} + @override + void reload() {} +} + +class _FakeNames extends ProductNameListNotifier { + @override + Future> build() async => const []; +} + +class _FakeSeries extends ProductSeriesListNotifier { + @override + Future> build() async => const []; +} + +class _FakeSpecs extends ProductSpecListNotifier { + @override + Future> build() async => const []; +} + +List _overrides() => [ + warehouseListProvider.overrideWith(() => _FakeWarehouses()), + supplierListProvider.overrideWith(() => _FakeSuppliers()), + productNameListProvider.overrideWith(() => _FakeNames()), + productSeriesListProvider.overrideWith(() => _FakeSeries()), + productSpecListProvider.overrideWith(() => _FakeSpecs()), + isReadonlyProvider.overrideWithValue(false), + ]; + +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + SharedPreferences.setMockInitialValues({}); + + goldenAcrossThemes( + 'stock-in form 录单(桌面)', + goldenPrefix: 'stock_in_form', + child: () => const Scaffold(body: StockInFormScreen()), + overrides: _overrides, + logical: const Size(1280, 920), + ); + + goldenAcrossThemes( + 'stock-in form 录单(移动)', + goldenPrefix: 'stock_in_form_mobile', + child: () => const Scaffold(body: StockInFormScreen()), + overrides: _overrides, + logical: const Size(390, 1400), + ); +} diff --git a/client/test/golden/stock_out_form_golden_test.dart b/client/test/golden/stock_out_form_golden_test.dart new file mode 100644 index 0000000..a826d41 --- /dev/null +++ b/client/test/golden/stock_out_form_golden_test.dart @@ -0,0 +1,68 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:jiu_client/core/models/page_result.dart'; +import 'package:jiu_client/core/auth/auth_state.dart'; +import 'package:jiu_client/models/partner.dart'; +import 'package:jiu_client/models/warehouse.dart'; +import 'package:jiu_client/providers/warehouse_provider.dart'; +import 'package:jiu_client/providers/partner_provider.dart'; +import 'package:jiu_client/screens/stock_out/stock_out_form_screen.dart'; + +import '../support/golden_harness.dart'; + +/// design-distill 阶段4:出库录单表单(旗舰屏)golden × 三主题。 +/// 锁住 单据信息卡 + 可编辑明细网格 + 底栏 随主题换色(含斑马行 token)。 +/// 更新基准:flutter test --update-goldens test/golden/stock_out_form_golden_test.dart + +const _warehouses = [ + Warehouse(id: 1, name: '主仓', isDefault: true), + Warehouse(id: 2, name: '二号仓', isDefault: false), +]; + +class _FakeWarehouses extends WarehouseListNotifier { + @override + Future> build() async => _warehouses; +} + +class _FakeCustomers extends PartnerListNotifier { + @override + Future> build() async => + const PageResult(data: [], total: 0, page: 1, pageSize: 20); + @override + void setPage(int page) {} + @override + void setPageSize(int pageSize) {} + @override + void setKeyword(String keyword) {} + @override + void reload() {} +} + +List _overrides() => [ + warehouseListProvider.overrideWith(() => _FakeWarehouses()), + customerListProvider.overrideWith(() => _FakeCustomers()), + isReadonlyProvider.overrideWithValue(false), + ]; + +void main() { + TestWidgetsFlutterBinding.ensureInitialized(); + SharedPreferences.setMockInitialValues({}); + + goldenAcrossThemes( + 'stock-out form 录单(桌面)', + goldenPrefix: 'stock_out_form', + child: () => const Scaffold(body: StockOutFormScreen()), + overrides: _overrides, + logical: const Size(1280, 920), + ); + + goldenAcrossThemes( + 'stock-out form 录单(移动)', + goldenPrefix: 'stock_out_form_mobile', + child: () => const Scaffold(body: StockOutFormScreen()), + overrides: _overrides, + logical: const Size(390, 1400), + ); +}