Compare commits

...

2 Commits

Author SHA1 Message Date
de8d898289
Fix sign-in, title bar, formatting 2024-08-27 08:21:15 +02:00
e996702408
Implement deleting favorites on frontend 2024-08-27 08:17:48 +02:00
3 changed files with 121 additions and 97 deletions

View File

@ -67,10 +67,8 @@ Future<bool> isLoggedIn(BuildContext context) async {
final prefs = await SharedPreferences.getInstance();
final token = prefs.getString('token');
if (token == null){
if (token == null) {
prefs.remove('id');
loggedIn = false;
user = User as User?;
return false;
}

View File

@ -52,101 +52,96 @@ class _SideMenuState extends State<SideMenu> {
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
title: Row(
children: [
const SizedBox(width: 55),
Text('SkanTravels',
style: GoogleFonts.jacquesFrancois(
fontSize: 30,
color: Colors.black,
),
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
title: Text('SkanTravels',
style: GoogleFonts.jacquesFrancois(
fontSize: 30,
color: Colors.black,
),
],
),
),
),
drawer: Drawer(
child: ListView(
padding: EdgeInsets.zero,
children: [
DrawerHeader(
child: Column(
children: [
const Image(image: AssetImage('assets/logo.png'), height: 100),
Text(
'SkanTravels',
style: GoogleFonts.jacquesFrancois(
fontSize: 20,
color: const Color(0xFF1862E7),
drawer: Drawer(
child: ListView(
padding: EdgeInsets.zero,
children: [
DrawerHeader(
child: Column(
children: [
const Image(image: AssetImage('assets/logo.png'), height: 100),
Text(
'SkanTravels',
style: GoogleFonts.jacquesFrancois(
fontSize: 20,
color: const Color(0xFF1862E7),
),
),
),
],
],
),
),
),
ListTile(
title: const Text('Home'),
leading: const Icon(Icons.home),
selected: _selectedIndex == 0,
onTap: () {
Navigator.pushReplacementNamed(context, '/home');
},
),
ListTile(
title: const Text('Favorites'),
leading: const Icon(Icons.star),
selected: _selectedIndex == 1,
onTap: () {
Navigator.pushReplacementNamed(context, '/favorites');
},
),
ListTile(
title: const Text('Profile'),
leading: const Icon(Icons.person),
selected: _selectedIndex == 2,
onTap: () {
Navigator.pushReplacementNamed(context, '/profile');
},
),
const Divider(
color: Colors.grey,
thickness: 2,
indent: 40,
),
...(loggedIn
? [
ListTile(
title: const Text('Log out'),
leading: const Icon(Icons.logout),
selected: false,
onTap: _logout,
),
]
: [
ListTile(
title: const Text('Register'),
leading: const Icon(Icons.add_box_outlined),
selected: _selectedIndex == 3,
onTap: () {
Navigator.pushReplacementNamed(context, '/register');
},
),
ListTile(
title: const Text('Login'),
leading: const Icon(Icons.login),
selected: _selectedIndex == 4,
onTap: () {
Navigator.pushReplacementNamed(context, '/login');
},
),
]
),
],
ListTile(
title: const Text('Home'),
leading: const Icon(Icons.home),
selected: _selectedIndex == 0,
onTap: () {
Navigator.pushReplacementNamed(context, '/home');
},
),
ListTile(
title: const Text('Favorites'),
leading: const Icon(Icons.star),
selected: _selectedIndex == 1,
onTap: () {
Navigator.pushReplacementNamed(context, '/favorites');
},
),
ListTile(
title: const Text('Profile'),
leading: const Icon(Icons.person),
selected: _selectedIndex == 2,
onTap: () {
Navigator.pushReplacementNamed(context, '/profile');
},
),
const Divider(
color: Colors.grey,
thickness: 2,
indent: 40,
),
...(loggedIn
? [
ListTile(
title: const Text('Log out'),
leading: const Icon(Icons.logout),
selected: false,
onTap: _logout,
),
]
: [
ListTile(
title: const Text('Register'),
leading: const Icon(Icons.add_box_outlined),
selected: _selectedIndex == 3,
onTap: () {
Navigator.pushReplacementNamed(context, '/register');
},
),
ListTile(
title: const Text('Login'),
leading: const Icon(Icons.login),
selected: _selectedIndex == 4,
onTap: () {
Navigator.pushReplacementNamed(context, '/login');
},
),
]
),
],
),
),
),
body: widget.body,
);
}
body: widget.body,
);
}
}

View File

@ -14,6 +14,34 @@ class FavoritesPage extends StatefulWidget {
class _FavoritesPage extends State<FavoritesPage> {
List<Favorite> _favorites = [];
void _confirmDeleteFavorite(Favorite favorite) {
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: const Text('Remove favorite'),
content: Text('Are you sure you want to remove ${favorite.name} from your favorites list?'),
actions: [
TextButton(onPressed: () => Navigator.pop(context), child: const Text('Cancel')),
TextButton(onPressed: () => _deleteFavorite(favorite), child: const Text('Remove', style: TextStyle(color: Colors.red))),
],
);
}
);
}
void _deleteFavorite(Favorite favorite) async {
Navigator.pop(context);
if (await api.request(context, api.ApiService.app, 'DELETE', '/favorites/${favorite.id}', null) == null) {
return;
}
setState(() {
_favorites = _favorites.where((fav) => fav.id != favorite.id).toList();
});
}
@override
void didChangeDependencies() {
super.didChangeDependencies();
@ -57,7 +85,10 @@ class _FavoritesPage extends State<FavoritesPage> {
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
const Padding(padding: EdgeInsets.only(top: 3), child: Icon(Icons.star, color: Colors.yellow, size: 36)),
const Padding(
padding: EdgeInsets.only(top: 3),
child: Icon(Icons.star, color: Colors.yellow, size: 36)
),
const SizedBox(width: 20),
Expanded(
child: Column(
@ -69,7 +100,7 @@ class _FavoritesPage extends State<FavoritesPage> {
),
),
const SizedBox(width: 20),
const Padding(padding: EdgeInsets.only(top: 5), child: Icon(Icons.delete, color: Colors.grey)),
IconButton(icon: const Icon(Icons.delete), color: Colors.grey, onPressed: () => _confirmDeleteFavorite(favorite)),
],
),
)).toList(),