TKK_E32230206/lib/features/iot/page/main_page.dart

89 lines
2.4 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 '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(),
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.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),
)
);
}
}