import 'package:ducafe_ui_core/ducafe_ui_core.dart'; import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:forui/forui.dart'; import 'package:pj_supermarket_cloud/common/index.dart'; /// 复刻 app.dart 的最小主题环境:ScreenUtil 按设计稿 1920x1080 初始化, /// Forui 主题按字体档位缩放,与真机设置页的工具栏渲染条件一致。 Widget _harness({required double sizeScalar}) { final base = FThemes.zinc.light; return ScreenUtilInit( designSize: const Size(1920, 1080), minTextAdapt: true, builder: (_, __) => FTheme( data: FThemeData.inherit( colorScheme: base.colorScheme, typography: base.typography.scale(sizeScalar: sizeScalar), style: base.style, ), child: MaterialApp( home: Scaffold( body: Center( child: Row( mainAxisSize: MainAxisSize.min, children: [ TerminalToolbarTextField( controller: TextEditingController(), hint: '姓名/编号/卡号/手机号', width: 300, ), TerminalToolbarButton(label: '重置', onTap: () {}), TerminalToolbarButton( label: '搜索', style: TerminalToolbarButtonStyle.primary, onTap: () {}, ), ], ), ), ), ), ), ); } void main() { tearDown(() { XfjDesignTokens.applyThemeMetrics( cardRadius: 12, controlRadius: 12, buttonSizeScale: 1, ); }); testWidgets('工具栏输入框在全部字体与按钮档位下与按钮等高且无溢出', (tester) async { for (final fontSize in SettingGlobalFontSize.values) { for (final buttonSize in SettingButtonSize.values) { XfjDesignTokens.applyThemeMetrics( cardRadius: 12, controlRadius: 12, buttonSizeScale: buttonSize.scale, ); await tester.pumpWidget(_harness(sizeScalar: fontSize.fontSize)); await tester.pump(); final combo = '字体${fontSize.title}+按钮${buttonSize.title}'; expect( tester.takeException(), isNull, reason: '$combo 组合出现布局溢出', ); final inputHeight = tester.getSize(find.byType(FTextField)).height; final buttonHeight = tester .getSize(find.byType(TerminalToolbarButton).first) .height; expect( inputHeight, buttonHeight, reason: '$combo 组合输入框与按钮高度不一致', ); } } }); }