108 lines
3.0 KiB
Dart
108 lines
3.0 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'dashboard/dashboard_screen.dart';
|
|
import 'control/control_screen.dart';
|
|
import 'setting/setting_screen.dart';
|
|
|
|
class MainScreen extends StatefulWidget {
|
|
const MainScreen({super.key});
|
|
|
|
@override
|
|
State<MainScreen> createState() => _MainScreenState();
|
|
}
|
|
|
|
class _MainScreenState extends State<MainScreen> {
|
|
int _selectedIndex = 0;
|
|
|
|
final List<Widget> _screens = const [
|
|
DashboardScreen(),
|
|
ControlScreen(),
|
|
SettingScreen(),
|
|
];
|
|
|
|
void _onItemTapped(int index) {
|
|
setState(() {
|
|
_selectedIndex = index;
|
|
});
|
|
}
|
|
|
|
Widget buildIconButton(IconData icon, String label, int index) {
|
|
final isSelected = _selectedIndex == index;
|
|
final color = isSelected ? Colors.green[700] : Colors.grey;
|
|
|
|
return Flexible(
|
|
fit: FlexFit.tight,
|
|
child: InkWell(
|
|
onTap: () => _onItemTapped(index),
|
|
child: Padding(
|
|
padding: const EdgeInsets.symmetric(vertical: 4.0),
|
|
child: Column(
|
|
mainAxisSize: MainAxisSize.min,
|
|
children: [
|
|
Icon(icon, color: color, size: 26),
|
|
const SizedBox(height: 2),
|
|
FittedBox(
|
|
child: Text(
|
|
label,
|
|
style: TextStyle(
|
|
color: color,
|
|
fontWeight:
|
|
isSelected ? FontWeight.w600 : FontWeight.normal,
|
|
fontSize: 11,
|
|
),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Scaffold(
|
|
extendBody: true,
|
|
resizeToAvoidBottomInset: true,
|
|
floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
|
|
floatingActionButton: SizedBox(
|
|
width: 66,
|
|
height: 66,
|
|
child: FloatingActionButton(
|
|
onPressed: () => _onItemTapped(0), // Dashboard / Monitoring di tengah
|
|
backgroundColor:
|
|
_selectedIndex == 0 ? Colors.green[700] : Colors.green[400],
|
|
elevation: _selectedIndex == 0 ? 8 : 4,
|
|
shape: RoundedRectangleBorder(
|
|
borderRadius: BorderRadius.circular(35),
|
|
),
|
|
child: const Icon(
|
|
Icons.analytics_outlined, // ikon monitoring yang keren
|
|
size: 35,
|
|
color: Colors.white,
|
|
),
|
|
),
|
|
),
|
|
bottomNavigationBar: SafeArea(
|
|
child: BottomAppBar(
|
|
shape: const CircularNotchedRectangle(),
|
|
notchMargin: 8,
|
|
elevation: 8,
|
|
color: Colors.white,
|
|
child: SizedBox(
|
|
height: 60,
|
|
child: Row(
|
|
mainAxisAlignment: MainAxisAlignment.spaceAround,
|
|
children: [
|
|
buildIconButton(Icons.settings_remote_outlined, 'Control', 1),
|
|
const SizedBox(width: 56), // space untuk FAB
|
|
buildIconButton(Icons.settings, 'Setting', 2),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
),
|
|
body: _screens[_selectedIndex],
|
|
);
|
|
}
|
|
}
|