Files
video/app/lib/screens/home/home_shell.dart
T
2026-10-15 20:36:59 +08:00

81 lines
2.2 KiB
Dart

import 'package:flutter/material.dart';
import '../../core/theme/app_theme.dart';
import '../../screens/feed/feed_screen.dart';
import '../../screens/profile/mine_screen.dart';
/// 首页壳:底部 Tab(首页/分类/发布/消息/我的),02-技术文档信息架构
/// 首页 Tab 为 Feed 播放页,我的页已接入,其余 Tab 随迭代接入;IndexedStack 保活各 Tab 状态
class HomeShell extends StatefulWidget {
const HomeShell({super.key});
@override
State<HomeShell> createState() => _HomeShellState();
}
class _HomeShellState extends State<HomeShell> {
int _index = 0;
@override
Widget build(BuildContext context) {
return Scaffold(
body: IndexedStack(
index: _index,
children: const [
FeedScreen(),
_TabPlaceholder('分类'),
_TabPlaceholder('发布'),
_TabPlaceholder('消息'),
MineScreen(),
],
),
bottomNavigationBar: NavigationBar(
backgroundColor: AppColors.surface,
indicatorColor: AppColors.primary.withValues(alpha: 0.2),
selectedIndex: _index,
onDestinationSelected: (i) => setState(() => _index = i),
destinations: const [
NavigationDestination(
icon: Icon(Icons.home_outlined),
selectedIcon: Icon(Icons.home, color: AppColors.primary),
label: '首页',
),
NavigationDestination(
icon: Icon(Icons.grid_view_outlined),
label: '分类',
),
NavigationDestination(
icon: Icon(Icons.add_box_outlined),
label: '发布',
),
NavigationDestination(
icon: Icon(Icons.notifications_none),
label: '消息',
),
NavigationDestination(
icon: Icon(Icons.person_outline),
label: '我的',
),
],
),
);
}
}
/// Tab 占位(迭代期)
class _TabPlaceholder extends StatelessWidget {
const _TabPlaceholder(this.title);
final String title;
@override
Widget build(BuildContext context) {
return Center(
child: Text(
'$title(随迭代接入)',
style: const TextStyle(color: AppColors.textSecondary, fontSize: 15),
),
);
}
}