main_screen.dart
import 'package:flutter/material.dart';
import 'camera_preview_screen.dart';
import 'home_screen.dart';
import 'history_screen.dart';
class MainScreen extends StatefulWidget {
final int initialIndex;
const MainScreen({super.key, this.initialIndex = 1});
@override
State<MainScreen> createState() => _MainScreenState();
}
class _MainScreenState extends State<MainScreen> {
late int _selectedIndex;
final List<Widget> _pages = [
const CameraPreviewScreen(),
const HomeScreen(),
HistoryScreen(),
];
@override
void initState() {
super.initState();
_selectedIndex = widget.initialIndex;
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: IndexedStack(
index: _selectedIndex,
children: _pages,
),
bottomNavigationBar: Container(
height: 80,
decoration: const BoxDecoration(
color: Color(0xFFCE8426),
),
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 16),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
_buildNavItem(Icons.camera_alt, 'ตัวระบุ', 0),
_buildNavItem(Icons.home, 'หน้าหลัก', 1),
_buildNavItem(Icons.history, 'ประวัติ', 2),
],
),
),
);
}
Widget _buildNavItem(IconData icon, String label, int index) {
final bool isSelected = _selectedIndex == index;
return GestureDetector(
onTap: () {
setState(() {
_selectedIndex = index;
});
},
child: AnimatedContainer(
duration: const Duration(milliseconds: 200),
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 6),
decoration: isSelected
? BoxDecoration(
color: const Color(0xFFFFCC80), // สีพื้นหลังเมื่อเลือก
borderRadius: BorderRadius.circular(20),
)
: null,
child: Row(
children: [
Icon(
icon,
size: 30,
color: isSelected ? Colors.black : Colors.black54,
),
const SizedBox(width: 6),
if (isSelected)
Text(
label,
style: const TextStyle(
color: Colors.black,
fontWeight: FontWeight.bold,
),
),
],
),
),
);
}
}1. โครงสร้างคลาส
2. _MainScreenState
3. initState
4. Scaffold + Body
5. Bottom Navigation Bar
6. _buildNavItem
7. สรุปง่าย ๆ
Last updated