fix(a11y): 限制底栏文字缩放并统一播放页触控尺寸
flutter-ci / test (push) Canceled after 0s

This commit is contained in:
Vicky authored and trae-solo-agent committed 2026-10-30 17:14:40 +08:00
1 parent 7509cf2ecd
commit 2f4593a46e
3 files changed
+74 -11

No files matched your search

+13 -8
View File
@@ -5,6 +5,8 @@ import 'package:flutter/material.dart';
import '../theme/app_colors.dart'; import '../theme/app_colors.dart';
import '../theme/app_dimens.dart'; import '../theme/app_dimens.dart';
const double _maxNavigationTextScale = 1.3;
/// 底部导航普通目的地。 /// 底部导航普通目的地。
class AppBottomNavItem { class AppBottomNavItem {
const AppBottomNavItem({ const AppBottomNavItem({
@@ -41,14 +43,17 @@ class AppBottomNav extends StatelessWidget {
key: barKey, key: barKey,
height: AppDimens.navHeight, height: AppDimens.navHeight,
color: AppColors.navBackground, color: AppColors.navBackground,
child: Row( child: MediaQuery.withClampedTextScaling(
children: [ maxScaleFactor: _maxNavigationTextScale,
for (final item in items) child: Row(
_NavDestination( children: [
item: item, for (final item in items)
unselectedColor: AppColors.navUnselected, _NavDestination(
), item: item,
], unselectedColor: AppColors.navUnselected,
),
],
),
), ),
); );
return ColoredBox( return ColoredBox(
@@ -155,12 +155,12 @@ class _DramaInfoSheetState extends State<DramaInfoSheet> {
); );
} }
/// 视觉上是个小圆钮,点按区域仍是 40pt,避免太小点不中。 /// 视觉上是个小圆钮,点按区域为 44pt。
Widget _closeButton(AppLocalizations l10n) { Widget _closeButton(AppLocalizations l10n) {
return SizedBox( return SizedBox(
key: const Key('drama-info-close'), key: const Key('drama-info-close'),
width: 40, width: AppDimens.tapTarget,
height: 40, height: AppDimens.tapTarget,
child: Center( child: Center(
child: Semantics( child: Semantics(
button: true, button: true,
+58
View File
@@ -210,4 +210,62 @@ void main() {
await tester.pumpAndSettle(); await tester.pumpAndSettle();
expect(find.byIcon(Icons.theaters_outlined), findsOneWidget); expect(find.byIcon(Icons.theaters_outlined), findsOneWidget);
}); });
testWidgets('should_not_overflow_when_text_scale_is_two_on_narrow_screen', (
tester,
) async {
tester.view.physicalSize = const Size(320, 640);
tester.view.devicePixelRatio = 1;
addTearDown(tester.view.resetPhysicalSize);
addTearDown(tester.view.resetDevicePixelRatio);
await tester.pumpWidget(
MaterialApp(
home: MediaQuery(
data: const MediaQueryData(textScaler: TextScaler.linear(2)),
child: Scaffold(
bottomNavigationBar: AppBottomNav(
items: [
AppBottomNavItem(
tabKey: const Key('large-home'),
icon: Icons.home_outlined,
selectedIcon: Icons.home_rounded,
label: 'Home',
selected: true,
onTap: () {},
),
AppBottomNavItem(
tabKey: const Key('large-recommend'),
icon: Icons.celebration_outlined,
selectedIcon: Icons.celebration_rounded,
label: 'Recommend',
onTap: () {},
),
AppBottomNavItem(
tabKey: const Key('large-following'),
icon: Icons.bookmark_border_rounded,
selectedIcon: Icons.bookmark_rounded,
label: 'Following',
onTap: () {},
),
AppBottomNavItem(
tabKey: const Key('large-mine'),
icon: Icons.person_outline_rounded,
selectedIcon: Icons.person_rounded,
label: 'My',
onTap: () {},
),
],
),
),
),
),
);
expect(tester.takeException(), isNull);
expect(
tester.getSize(find.byKey(const Key('large-recommend'))).height,
greaterThanOrEqualTo(AppDimens.tapTarget),
);
});
} }