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_dimens.dart';
const double _maxNavigationTextScale = 1.3;
/// 底部导航普通目的地。
class AppBottomNavItem {
const AppBottomNavItem({
@@ -41,14 +43,17 @@ class AppBottomNav extends StatelessWidget {
key: barKey,
height: AppDimens.navHeight,
color: AppColors.navBackground,
child: Row(
children: [
for (final item in items)
_NavDestination(
item: item,
unselectedColor: AppColors.navUnselected,
),
],
child: MediaQuery.withClampedTextScaling(
maxScaleFactor: _maxNavigationTextScale,
child: Row(
children: [
for (final item in items)
_NavDestination(
item: item,
unselectedColor: AppColors.navUnselected,
),
],
),
),
);
return ColoredBox(
@@ -155,12 +155,12 @@ class _DramaInfoSheetState extends State<DramaInfoSheet> {
);
}
/// 视觉上是个小圆钮,点按区域仍是 40pt,避免太小点不中。
/// 视觉上是个小圆钮,点按区域为 44pt。
Widget _closeButton(AppLocalizations l10n) {
return SizedBox(
key: const Key('drama-info-close'),
width: 40,
height: 40,
width: AppDimens.tapTarget,
height: AppDimens.tapTarget,
child: Center(
child: Semantics(
button: true,
+58
View File
@@ -210,4 +210,62 @@ void main() {
await tester.pumpAndSettle();
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),
);
});
}