96 lines
2.6 KiB
Dart
96 lines
2.6 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
|
|
import '../../../core/app_theme.dart';
|
|
import '../../../features/auth/auth_notifier.dart';
|
|
import '../../../core/routes.dart';
|
|
import 'home_page.dart';
|
|
import 'kumbung_map_page.dart';
|
|
import 'control_page.dart';
|
|
|
|
class MainPage extends ConsumerStatefulWidget {
|
|
const MainPage({super.key});
|
|
|
|
@override
|
|
ConsumerState<MainPage> createState() => _MainPageState();
|
|
}
|
|
|
|
class _MainPageState extends ConsumerState<MainPage> {
|
|
int _currentIndex = 0;
|
|
|
|
final List<Widget> _pages = const [
|
|
MonitoringPage(),
|
|
KumbungMapPage(),
|
|
ControlPage(),
|
|
];
|
|
|
|
Future<void> _logout() async {
|
|
final confirm = await showDialog<bool>(
|
|
context: context,
|
|
builder: (_) => AlertDialog(
|
|
title: const Text('Keluar'),
|
|
content: const Text('Apakah kamu yakin ingin keluar?'),
|
|
actions: [
|
|
TextButton(
|
|
onPressed: () => Navigator.pop(context, false),
|
|
child: const Text('Batal'),
|
|
),
|
|
TextButton(
|
|
onPressed: () => Navigator.pop(context, true),
|
|
child: const Text(
|
|
'Keluar',
|
|
style: TextStyle(color: AppTheme.statusDanger),
|
|
),
|
|
),
|
|
],
|
|
),
|
|
);
|
|
|
|
if (confirm == true && mounted) {
|
|
await ref.read(authProvider.notifier).logout();
|
|
if (mounted) {
|
|
Navigator.pushNamedAndRemoveUntil(
|
|
context, AppRoutes.landing, (_) => false);
|
|
}
|
|
}
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Scaffold(
|
|
body: IndexedStack(
|
|
index: _currentIndex,
|
|
children: _pages,
|
|
),
|
|
bottomNavigationBar: BottomNavigationBar(
|
|
currentIndex: _currentIndex,
|
|
onTap: (i) => setState(() => _currentIndex = i),
|
|
items: const [
|
|
BottomNavigationBarItem(
|
|
icon: Icon(Icons.dashboard_outlined),
|
|
activeIcon: Icon(Icons.dashboard),
|
|
label: 'Monitoring',
|
|
),
|
|
BottomNavigationBarItem(
|
|
icon: Icon(Icons.map_outlined),
|
|
activeIcon: Icon(Icons.map),
|
|
label: 'Peta',
|
|
),
|
|
BottomNavigationBarItem(
|
|
icon: Icon(Icons.tune_outlined),
|
|
activeIcon: Icon(Icons.tune),
|
|
label: 'Control',
|
|
),
|
|
],
|
|
),
|
|
floatingActionButton: FloatingActionButton.small(
|
|
onPressed: _logout,
|
|
backgroundColor: Colors.white,
|
|
foregroundColor: AppTheme.textSecondary,
|
|
elevation: 2,
|
|
child: const Icon(Icons.logout, size: 20),
|
|
)
|
|
);
|
|
}
|
|
}
|