fix(flutter): 回退底部导航为四槽

This commit is contained in:
Zhou Weidong committed 2026-10-20 10:18:12 +08:00
1 parent e448003f1b
commit 2f1a4c5c69
10 files changed
+21 -139

No files matched your search

-5
View File
@@ -42,11 +42,6 @@ abstract final class AppColors {
/// 底部导航底色。
static const bar = Color(0xFFFFFDFB);
/// 中央操作按钮渐变。
static const navCenterStart = Color(0xFFFF9A3D);
static const navCenterEnd = Color(0xFFFF6A00);
static const navCenterShadow = Color(0x33FF7A1A);
/// 卡片轻阴影。
static const cardShadow = Color(0x14FF8A3D);
-2
View File
@@ -47,8 +47,6 @@ abstract final class AppDimens {
static const double navHeight = 64;
static const double navIcon = 20;
static const double navCenter = 56;
static const double navCenterIcon = 28;
static const double progressHeight = 3;
static const double progressRadius = 2;
static const double progressLineHeight = 3;
+4 -82
View File
@@ -26,37 +26,21 @@ class AppBottomNavItem {
final bool selected;
}
/// 底部导航中央操作按钮。
class AppBottomNavCenterAction {
const AppBottomNavCenterAction({
required this.label,
required this.onTap,
this.key = const Key('nav-center-action'),
});
final Key key;
final String label;
final VoidCallback onTap;
}
/// 全局五槽底部导航。
/// 四槽底部导航,仅做浅色暖橙视觉换肤。
class AppBottomNav extends StatelessWidget {
const AppBottomNav({
super.key,
required this.items,
this.centerAction,
this.backgroundColor = AppColors.bar,
this.barKey,
});
final List<AppBottomNavItem> items;
final AppBottomNavCenterAction? centerAction;
final Color backgroundColor;
final Key? barKey;
@override
Widget build(BuildContext context) {
final action = centerAction;
return ClipRect(
child: BackdropFilter(
filter: ImageFilter.blur(sigmaX: 20, sigmaY: 20),
@@ -69,21 +53,9 @@ class AppBottomNav extends StatelessWidget {
color: backgroundColor.withValues(alpha: 0.95),
border: const Border(top: BorderSide(color: AppColors.border)),
),
child: action == null
? Row(
children: [
for (final item in items) _NavDestination(item: item),
],
)
: Row(
children: [
for (final item in items.take(2))
_NavDestination(item: item),
Expanded(child: _CenterDestination(action: action)),
for (final item in items.skip(2))
_NavDestination(item: item),
],
),
child: Row(
children: [for (final item in items) _NavDestination(item: item)],
),
),
),
),
@@ -143,53 +115,3 @@ class _NavDestination extends StatelessWidget {
),
);
}
class _CenterDestination extends StatelessWidget {
const _CenterDestination({required this.action});
final AppBottomNavCenterAction action;
@override
Widget build(BuildContext context) {
return Center(
child: Semantics(
button: true,
label: action.label,
child: Material(
color: Colors.transparent,
shape: const CircleBorder(),
clipBehavior: Clip.antiAlias,
child: Ink(
width: AppDimens.navCenter,
height: AppDimens.navCenter,
decoration: const BoxDecoration(
shape: BoxShape.circle,
gradient: LinearGradient(
begin: Alignment.topLeft,
end: Alignment.bottomRight,
colors: [AppColors.navCenterStart, AppColors.navCenterEnd],
),
boxShadow: [
BoxShadow(
color: AppColors.navCenterShadow,
blurRadius: 14,
offset: Offset(0, 5),
),
],
),
child: InkWell(
key: action.key,
customBorder: const CircleBorder(),
onTap: action.onTap,
child: const Icon(
Icons.add_rounded,
color: AppColors.onPrimary,
size: AppDimens.navCenterIcon,
),
),
),
),
),
);
}
}
-4
View File
@@ -340,10 +340,6 @@ class _DiscoverPageState extends State<DiscoverPage> {
}
Widget _bottomNav(AppLocalizations l10n) => AppBottomNav(
centerAction: AppBottomNavCenterAction(
label: l10n.createTab,
onTap: () => _act(DiscoverPageAction.create),
),
items: [
AppBottomNavItem(
tabKey: const Key('discover-nav-home'),
-4
View File
@@ -195,10 +195,6 @@ class _HomeTabsState extends State<_HomeTabs> {
Widget _nav(BuildContext context, AppLocalizations l10n) {
return AppBottomNav(
barKey: const Key('home-tabs-bar'),
centerAction: AppBottomNavCenterAction(
label: l10n.createTab,
onTap: () => _selectTab(context, 2),
),
items: [
_navItem(context, l10n, 0),
_navItem(context, l10n, 1),
-4
View File
@@ -242,10 +242,6 @@ class _MyPageState extends State<MyPage> {
Widget _bottomNav(AppLocalizations l10n) {
return AppBottomNav(
centerAction: AppBottomNavCenterAction(
label: l10n.createTab,
onTap: () => _act(MyPageAction.create),
),
items: [
AppBottomNavItem(
tabKey: const Key('mine-nav-home'),