Files
ai_english/client/lib/features/main/screens/main_app_screen.dart
2025-11-17 14:09:17 +08:00

108 lines
2.8 KiB
Dart

import 'package:flutter/material.dart';
import '../../home/screens/home_screen.dart';
import '../../learning/screens/learning_home_screen.dart';
import '../../profile/screens/profile_home_screen.dart';
/// 主应用界面,包含底部导航栏
class MainAppScreen extends StatefulWidget {
const MainAppScreen({super.key});
@override
State<MainAppScreen> createState() => _MainAppScreenState();
}
class _MainAppScreenState extends State<MainAppScreen> {
int _currentIndex = 0;
final List<Widget> _pages = [
const HomeScreen(),
const LearningHomeScreen(),
const ProfileHomeScreen(),
];
@override
Widget build(BuildContext context) {
return Scaffold(
body: IndexedStack(
index: _currentIndex,
children: _pages,
),
bottomNavigationBar: Container(
decoration: BoxDecoration(
color: Colors.white,
boxShadow: [
BoxShadow(
color: Colors.black.withOpacity(0.1),
blurRadius: 10,
offset: const Offset(0, -2),
),
],
),
child: SafeArea(
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 8.0, vertical: 8.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
_buildNavItem(
icon: Icons.home,
label: '首页',
index: 0,
),
_buildNavItem(
icon: Icons.school,
label: '学习',
index: 1,
),
_buildNavItem(
icon: Icons.person,
label: '我的',
index: 2,
),
],
),
),
),
),
);
}
Widget _buildNavItem({
required IconData icon,
required String label,
required int index,
}) {
final isSelected = _currentIndex == index;
final color = isSelected ? const Color(0xFF2196F3) : Colors.grey;
return GestureDetector(
onTap: () {
setState(() {
_currentIndex = index;
});
},
child: Container(
padding: const EdgeInsets.symmetric(vertical: 4, horizontal: 8),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Icon(
icon,
color: color,
size: 24,
),
const SizedBox(height: 2),
Text(
label,
style: TextStyle(
color: color,
fontSize: 12,
fontWeight: isSelected ? FontWeight.w600 : FontWeight.normal,
),
),
],
),
),
);
}
}