diff --git a/covas_mobile/lib/pages/ListItemByOrganizers.dart b/covas_mobile/lib/pages/ListItemByOrganizers.dart index e0bcf08..228bd15 100644 --- a/covas_mobile/lib/pages/ListItemByOrganizers.dart +++ b/covas_mobile/lib/pages/ListItemByOrganizers.dart @@ -94,6 +94,30 @@ class _MyHomePageState extends State { }); } + Future> toggleInterested(String eventId) async { + SharedPreferences prefs = await SharedPreferences.getInstance(); + var accessToken = prefs.getString("access_token") ?? ""; + final url = Uri.parse("${globals.api}/events/${eventId}/interest"); + if (accessToken.isNotEmpty) { + final response = await http.post( + url, + headers: { + "Content-Type": "application/json", + HttpHeaders.cookieHeader: "access_token=$accessToken" + }, + ); + + if (response.statusCode != 200) { + throw (AppLocalizations.of(context)?.toogle_interest ?? + "Error toogle interest: ${response.statusCode}"); + } + + var event = json.decode(response.body); + return event; + } + return {"interested": false, "interested_count": 0}; + } + // variable to call and store future list of posts // function to fetch data from api and return future list of posts @@ -190,10 +214,39 @@ class _MyHomePageState extends State { final dateLongue = DateFormat('EEEE d MMMM y', locale).format(startDate); + final countInterestedString = + AppLocalizations.of(context)?.count_interested ?? + "Interested people number"; + final countInterested = + "${countInterestedString} : ${post.interestedCount}"; return ListTile( title: Text('${post.name!}'), - subtitle: Text('${post.place!}\n${dateLongue}'), + subtitle: + Text('${post.place!}\n${dateLongue}\n${countInterested}'), + trailing: IconButton( + onPressed: () async { + try { + final result = await toggleInterested(post.id!); + setState(() { + post.interested = result["interested"]; + post.interestedCount = result["interested_count"]; + }); + } catch (e) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text( + AppLocalizations.of(context)?.error_update ?? + "Error when updating")), + ); + } + }, + icon: Icon( + post.interested ?? false + ? Icons.favorite + : Icons.favorite_border, + color: + post.interested ?? false ? Colors.red : Colors.grey)), onTap: () { Navigator.push( context, diff --git a/covas_mobile/lib/pages/ListItemByTags.dart b/covas_mobile/lib/pages/ListItemByTags.dart index 97c8658..14c762e 100644 --- a/covas_mobile/lib/pages/ListItemByTags.dart +++ b/covas_mobile/lib/pages/ListItemByTags.dart @@ -121,6 +121,30 @@ class _MyHomePageState extends State { return body; } + Future> toggleInterested(String eventId) async { + SharedPreferences prefs = await SharedPreferences.getInstance(); + var accessToken = prefs.getString("access_token") ?? ""; + final url = Uri.parse("${globals.api}/events/${eventId}/interest"); + if (accessToken.isNotEmpty) { + final response = await http.post( + url, + headers: { + "Content-Type": "application/json", + HttpHeaders.cookieHeader: "access_token=$accessToken" + }, + ); + + if (response.statusCode != 200) { + throw (AppLocalizations.of(context)?.toogle_interest ?? + "Error toogle interest: ${response.statusCode}"); + } + + var event = json.decode(response.body); + return event; + } + return {"interested": false, "interested_count": 0}; + } + @override void initState() { super.initState(); @@ -168,6 +192,7 @@ class _MyHomePageState extends State { Widget buildPosts(List posts) { // ListView Builder to show data in a list String tag = AppLocalizations.of(context)?.item_tags ?? "Tags : "; + return Scaffold( appBar: AppBar( // Here we take the value from the MyHomePage object that was created by @@ -191,9 +216,39 @@ class _MyHomePageState extends State { final dateLongue = DateFormat('EEEE d MMMM y', locale).format(startDate); + final countInterestedString = + AppLocalizations.of(context)?.count_interested ?? + "Interested people number"; + final countInterested = + "${countInterestedString} : ${post.interestedCount}"; + return ListTile( title: Text('${post.name!}'), - subtitle: Text('${post.place!}\n${dateLongue}'), + subtitle: + Text('${post.place!}\n${dateLongue}\n${countInterested}'), + trailing: IconButton( + onPressed: () async { + try { + final result = await toggleInterested(post.id!); + setState(() { + post.interested = result["interested"]; + post.interestedCount = result["interested_count"]; + }); + } catch (e) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text( + AppLocalizations.of(context)?.error_update ?? + "Error when updating")), + ); + } + }, + icon: Icon( + post.interested ?? false + ? Icons.favorite + : Icons.favorite_border, + color: + post.interested ?? false ? Colors.red : Colors.grey)), onTap: () { Navigator.push( context,