Files
biz_xfj_cloud/test/common/terminal_toolbar_test.dart
T
dzc 9cc99deed7 feat:同时核销几笔订单
feat:人脸质量检测
2026-08-31 17:59:03 +08:00

157 lines
5.0 KiB
Dart

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';
void main() {
testWidgets('1280x720 大字号下工具栏输入框不发生布局溢出', (tester) async {
await tester.binding.setSurfaceSize(const Size(1280, 720));
addTearDown(() => tester.binding.setSurfaceSize(null));
final controller = TextEditingController();
addTearDown(controller.dispose);
await tester.pumpWidget(
_terminalTestApp(
(_) => TerminalToolbarTextField(
width: 360.w,
controller: controller,
hint: '订单号、用户或商品',
prefixBuilder: (_, __, ___) => FIcon(
FAssets.icons.search,
size: 19.sp,
).center().width(44.w),
),
),
);
expect(find.byType(FTextField), findsOneWidget);
expect(tester.takeException(), isNull);
});
testWidgets('1280x720 大字号下日期范围完整布局不溢出', (tester) async {
await tester.binding.setSurfaceSize(const Size(1280, 720));
addTearDown(() => tester.binding.setSurfaceSize(null));
await tester.pumpWidget(
_terminalTestApp(
(_) => TerminalToolbarDateControl(
width: 326.w,
label: '2026-07-28 至 2026-07-28',
onTap: () {},
),
),
);
expect(find.text('2026-07-28 至 2026-07-28'), findsOneWidget);
expect(tester.takeException(), isNull);
});
testWidgets('工具栏输入框与按钮在各按钮大小档位下保持等高', (tester) async {
await tester.binding.setSurfaceSize(const Size(1280, 720));
addTearDown(() => tester.binding.setSurfaceSize(null));
addTearDown(() => XfjDesignTokens.applyThemeMetrics(
cardRadius: SettingCardRadius.standard.radius,
controlRadius: SettingButtonRadius.standard.radius,
buttonSizeScale: SettingButtonSize.standard.scale,
));
final controller = TextEditingController();
addTearDown(controller.dispose);
double previousHeight = 0;
for (final size in SettingButtonSize.values) {
XfjDesignTokens.applyThemeMetrics(
cardRadius: SettingCardRadius.standard.radius,
controlRadius: SettingButtonRadius.standard.radius,
buttonSizeScale: size.scale,
);
await tester.pumpWidget(
_terminalTestApp(
(_) => Row(
mainAxisSize: MainAxisSize.min,
children: [
TerminalToolbarTextField(
width: 360.w,
controller: controller,
hint: '搜索商品、自编码或扫码',
),
SizedBox(width: 12.w),
TerminalToolbarButton(
label: '搜索',
onTap: () {},
),
],
),
),
);
final inputHeight = tester.getSize(find.byType(InputDecorator)).height;
final buttonHeight =
tester.getSize(find.byType(TerminalToolbarButton)).height;
expect(inputHeight, closeTo(buttonHeight, 0.01));
expect(inputHeight, greaterThan(previousHeight));
previousHeight = inputHeight;
expect(tester.takeException(), isNull);
}
});
testWidgets('工具栏按钮的全部视觉层级保持统一高度', (tester) async {
await tester.binding.setSurfaceSize(const Size(1280, 720));
addTearDown(() => tester.binding.setSurfaceSize(null));
await tester.pumpWidget(
_terminalTestApp(
(_) => Row(
mainAxisSize: MainAxisSize.min,
children: TerminalToolbarButtonStyle.values
.map(
(style) => TerminalToolbarButton(
label: style.name,
icon: FAssets.icons.search,
style: style,
onTap: () {},
),
)
.toList(growable: false),
),
),
);
final buttons = find.byType(TerminalToolbarButton);
expect(buttons, findsNWidgets(TerminalToolbarButtonStyle.values.length));
final heights = tester.getSize(buttons.at(0)).height;
for (var index = 1;
index < TerminalToolbarButtonStyle.values.length;
index++) {
expect(tester.getSize(buttons.at(index)).height, closeTo(heights, 0.01));
}
expect(find.text('destructive'), findsOneWidget);
expect(tester.takeException(), isNull);
});
}
Widget _terminalTestApp(WidgetBuilder childBuilder) {
final baseTheme = FThemes.zinc.light;
final terminalTheme = FThemeData.inherit(
colorScheme: baseTheme.colorScheme,
typography: baseTheme.typography.scale(sizeScalar: 1.4),
style: baseTheme.style,
);
return ScreenUtilInit(
designSize: const Size(1920, 1080),
minTextAdapt: true,
splitScreenMode: true,
builder: (_, __) => MaterialApp(
home: FTheme(
data: terminalTheme,
child: Builder(
builder: (context) => Scaffold(
body: Center(child: childBuilder(context)),
),
),
),
),
);
}