Compare commits
	
		
			2 Commits
		
	
	
		
			cb67575bfe
			...
			de8d898289
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| de8d898289 | |||
| e996702408 | 
| @ -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; | ||||
|   } | ||||
| 
 | ||||
|  | ||||
| @ -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, | ||||
|     ); | ||||
|   } | ||||
| } | ||||
| @ -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(), | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user