157 lines
5.0 KiB
Dart
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)),
|
|
),
|
|
),
|
|
),
|
|
),
|
|
);
|
|
}
|