environment_monitoring_app/lib/home_page.dart
2025-08-04 15:11:24 +08:00

106 lines
3.3 KiB
Dart

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'package:environment_monitoring_app/auth_provider.dart';
import 'package:environment_monitoring_app/collapsible_sidebar.dart'; // Import your sidebar widget
class HomePage extends StatefulWidget {
const HomePage({super.key});
@override
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
bool _isSidebarCollapsed = true;
String _currentSelectedRoute = '/home';
@override
Widget build(BuildContext context) {
final auth = Provider.of<AuthProvider>(context);
return Scaffold(
appBar: AppBar(
leading: IconButton(
icon: Icon(_isSidebarCollapsed ? Icons.menu : Icons.close, color: Colors.white),
onPressed: () {
setState(() {
_isSidebarCollapsed = !_isSidebarCollapsed;
});
},
),
title: const Text("Environment Monitoring"),
actions: [
IconButton(
icon: const Icon(Icons.person),
onPressed: () {
Navigator.pushNamed(context, '/profile');
},
),
],
),
body: Row(
children: [
CollapsibleSidebar(
isCollapsed: _isSidebarCollapsed,
onToggle: () {
setState(() {
_isSidebarCollapsed = !_isSidebarCollapsed;
});
},
onNavigate: (route) {
setState(() {
_currentSelectedRoute = route;
});
Navigator.pushNamed(context, route);
},
),
Expanded(
child: Padding(
padding: const EdgeInsets.all(24),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
"Welcome, ${auth.userEmail ?? 'User'}",
style: Theme.of(context).textTheme.headlineSmall?.copyWith(
fontWeight: FontWeight.bold,
),
),
const SizedBox(height: 32),
Text(
"Select a Department:",
style: Theme.of(context).textTheme.titleMedium,
),
const SizedBox(height: 16),
Wrap(
spacing: 16,
runSpacing: 16,
children: [
// Updated navigation to the new department home pages
_buildNavButton(context, "Air", Icons.cloud, '/air/home'),
_buildNavButton(context, "River", Icons.water, '/river/home'),
_buildNavButton(context, "Marine", Icons.sailing, '/marine/home'),
],
),
],
),
),
),
],
),
);
}
Widget _buildNavButton(BuildContext context, String label, IconData icon, String route) {
return ElevatedButton.icon(
onPressed: () => Navigator.pushNamed(context, route),
icon: Icon(icon, size: 24),
label: Text(label),
style: ElevatedButton.styleFrom(
padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 16),
textStyle: const TextStyle(fontSize: 16),
),
);
}
}