environment_monitoring_app/lib/screens/logout.dart

62 lines
2.4 KiB
Dart

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import '../auth_provider.dart';
class LogoutScreen extends StatelessWidget {
const LogoutScreen({super.key});
@override
Widget build(BuildContext context) {
final auth = Provider.of<AuthProvider>(context, listen: false);
// Use addPostFrameCallback to ensure the dialog is shown after the widget
// has been built, preventing errors like "setState() called during build".
WidgetsBinding.instance.addPostFrameCallback((_) {
// Check if a dialog is already open to prevent multiple dialogs
// This is a simple check, more robust solutions might involve a state variable
// if this screen could be rebuilt frequently without navigation.
if (Navigator.of(context).canPop() && ModalRoute.of(context)?.isCurrent == true) {
showDialog(
context: context,
barrierDismissible: false, // User must choose an action (Cancel/Logout)
builder: (dialogContext) => AlertDialog(
title: const Text("Are you sure?"),
content: const Text("Do you really want to log out?"),
actions: [
TextButton(
onPressed: () {
Navigator.pop(dialogContext); // Close dialog
// Go back to the previous screen if user cancels logout
Navigator.pop(context);
},
child: const Text("Cancel"),
),
ElevatedButton(
onPressed: () {
Navigator.pop(dialogContext); // Close dialog
auth.logout();
// Navigate to login screen and remove all routes below it
Navigator.pushNamedAndRemoveUntil(context, '/', (route) => false);
},
style: ElevatedButton.styleFrom(
backgroundColor: Colors.red[700],
foregroundColor: Colors.white,
),
child: const Text("Logout"),
),
],
),
);
}
});
// The LogoutScreen itself can be an empty Scaffold, as its primary
// purpose is to trigger the dialog immediately upon navigation.
return Scaffold(
appBar: AppBar(title: const Text("Logout")),
body: const Center(
child: CircularProgressIndicator(), // Show a loading indicator briefly
),
);
}
}