144 lines
4.3 KiB
Dart
144 lines
4.3 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:shared_preferences/shared_preferences.dart';
|
|
import 'package:http/http.dart' as http;
|
|
import 'dart:io';
|
|
import '../pages/EditProfile.dart';
|
|
import '../pages/EditSettings.dart';
|
|
import '../pages/ListItemMenu.dart';
|
|
import 'alert.dart';
|
|
|
|
import '../variable/globals.dart' as globals;
|
|
|
|
import '../pages/LoginDemo.dart';
|
|
|
|
class MyDrawer extends StatelessWidget with ShowAlertDialog {
|
|
Future<void> logout(BuildContext context) async {
|
|
SharedPreferences prefs = await SharedPreferences.getInstance();
|
|
var accessToken = prefs.getString("access_token") ?? "";
|
|
|
|
if (accessToken.isNotEmpty) {
|
|
var url = Uri.parse("${globals.api}/token");
|
|
|
|
try {
|
|
var response = await http.delete(url, headers: {
|
|
"Content-Type": "application/json",
|
|
HttpHeaders.cookieHeader: "access_token=${accessToken}"
|
|
});
|
|
|
|
print("Status code logout ${response.statusCode}");
|
|
|
|
if (response.statusCode == 200) {
|
|
await prefs.remove("access_token"); // Correctly remove the token
|
|
Navigator.pushAndRemoveUntil(
|
|
context,
|
|
MaterialPageRoute(builder: (_) => LoginDemo()),
|
|
(route) => false, // Remove all previous routes
|
|
);
|
|
} else {
|
|
String errorMessage;
|
|
switch (response.statusCode) {
|
|
case 400:
|
|
errorMessage = "Bad Request: Please check your input.";
|
|
break;
|
|
case 401:
|
|
errorMessage = "Unauthorized: Invalid credentials.";
|
|
break;
|
|
case 403:
|
|
errorMessage = "Forbidden: You don't have permission.";
|
|
break;
|
|
case 404:
|
|
errorMessage = "Not Found: The resource was not found.";
|
|
break;
|
|
case 500:
|
|
errorMessage =
|
|
"Server Error: Something went wrong on the server.";
|
|
break;
|
|
default:
|
|
errorMessage = "Unexpected Error: ${response.statusCode}";
|
|
break;
|
|
}
|
|
print(errorMessage);
|
|
showAlertDialog(context, "Error", errorMessage);
|
|
}
|
|
} catch (e) {
|
|
print("Error: $e");
|
|
showAlertDialog(
|
|
context, "Error", "An error occurred. Please try again.");
|
|
}
|
|
} else {
|
|
showAlertDialog(context, "Error", "Invalid token.");
|
|
}
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Drawer(
|
|
child: ListView(
|
|
padding: EdgeInsets.zero,
|
|
children: [
|
|
// Drawer Header
|
|
DrawerHeader(
|
|
decoration: BoxDecoration(
|
|
color: Colors.blue,
|
|
),
|
|
child: Text(
|
|
'Menu',
|
|
style: TextStyle(
|
|
color: Colors.white,
|
|
fontSize: 24,
|
|
),
|
|
),
|
|
),
|
|
// Drawer Items
|
|
ListTile(
|
|
leading: Icon(Icons.home),
|
|
title: Text('Home'),
|
|
onTap: () {
|
|
Navigator.pushReplacement(
|
|
context, MaterialPageRoute(builder: (_) => ListItemMenu()));
|
|
|
|
/// Close the drawer
|
|
},
|
|
),
|
|
ListTile(
|
|
leading: Icon(Icons.settings),
|
|
title: Text('Settings'),
|
|
onTap: () {
|
|
Navigator.pushReplacement(
|
|
context,
|
|
MaterialPageRoute(
|
|
builder: (_) => EditSettings())); // Close the drawer
|
|
},
|
|
),
|
|
ListTile(
|
|
leading: Icon(Icons.account_circle),
|
|
title: Text('Update profile'),
|
|
onTap: () {
|
|
Navigator.pushReplacement(
|
|
context,
|
|
MaterialPageRoute(
|
|
builder: (_) => EditProfile())); // Close the drawer
|
|
},
|
|
),
|
|
ListTile(
|
|
leading: Icon(Icons.info),
|
|
title: Text('About'),
|
|
onTap: () {
|
|
showAlertDialog(
|
|
context, 'About', "Version 0.0.1"); // Close the drawer
|
|
},
|
|
),
|
|
ListTile(
|
|
leading: Icon(Icons.logout),
|
|
title: Text('Log out'),
|
|
onTap: () async {
|
|
logout(context);
|
|
// Close the drawer
|
|
},
|
|
),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
}
|