This commit is contained in:
1 parent
7509cf2ecd
commit
2f4593a46e
3 files changed
+74
-11
No files matched your search
@@ -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,
|
||||||
|
|||||||
@@ -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),
|
||||||
|
);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user