diff --git a/lib/helpers/friends_helper.dart b/lib/helpers/friends_helper.dart index 8dc8ad9..e58bc67 100644 --- a/lib/helpers/friends_helper.dart +++ b/lib/helpers/friends_helper.dart @@ -24,15 +24,31 @@ class FriendsHelper { // Parse and return the list of friends FriendsList list = FriendsList(); - response.getArray().forEach((f) => - list.add(Friend( - id: f["ID_friend"], - accepted: f["accepted"] == 1, - lastActive: f["time_last_activity"], - following: f["following"] == 1, - canPostTexts: f["canPostTexts"],),), - ); + response.getArray().forEach( + (f) => list.add( + Friend( + id: f["ID_friend"], + accepted: f["accepted"] == 1, + lastActive: f["time_last_activity"], + following: f["following"] == 1, + canPostTexts: f["canPostTexts"], + ), + ), + ); return list; } -} \ No newline at end of file + + /// Respond to friendship request + Future respondRequest(int friendID, bool accept) async { + final response = await APIRequest( + uri: "friends/respondRequest", + needLogin: true, + args: { + "friendID": friendID.toString(), + "accept": accept.toString() + }).exec(); + + return response.code == 200; + } +} diff --git a/lib/ui/screens/friends_list_screen.dart b/lib/ui/screens/friends_list_screen.dart index 1749ff1..9914c69 100644 --- a/lib/ui/screens/friends_list_screen.dart +++ b/lib/ui/screens/friends_list_screen.dart @@ -2,6 +2,7 @@ import 'package:comunic/helpers/friends_helper.dart'; import 'package:comunic/helpers/users_helper.dart'; import 'package:comunic/lists/friends_list.dart'; import 'package:comunic/lists/users_list.dart'; +import 'package:comunic/models/friend.dart'; import 'package:comunic/ui/tiles/accepted_friend_tile.dart'; import 'package:comunic/ui/tiles/pending_friend_tile.dart'; import 'package:comunic/ui/widgets/safe_state.dart'; @@ -41,7 +42,6 @@ class _FriendsListScreenState extends SafeState { void _gotError() => error = _friendsList == null ? _ErrorsLevel.MAJOR : _ErrorsLevel.MINOR; - @override void didChangeDependencies() { super.didChangeDependencies(); @@ -75,8 +75,7 @@ class _FriendsListScreenState extends SafeState { } /// Build and return loading error - Widget _buildError() => - buildErrorCard( + Widget _buildError() => buildErrorCard( tr("Could not load your list of friends!"), actions: [ FlatButton( @@ -96,7 +95,6 @@ class _FriendsListScreenState extends SafeState { return Column( children: [ - // Check for errors Container(child: _error != _ErrorsLevel.NONE ? _buildError() : null), @@ -105,18 +103,32 @@ class _FriendsListScreenState extends SafeState { // List of friends Expanded( - child: ListView.builder(itemCount: _friendsList.length, itemBuilder: (c, i) => - _friendsList[i].accepted ? AcceptedFriendTile( - friend: _friendsList[i], - user: _usersInfo.getUser(_friendsList[i].id), - ) : PendingFriendTile( - friend: _friendsList[i], - user: _usersInfo.getUser(_friendsList[i].id), - onRespond: (friend, accept){}, - )), + child: ListView.builder( + itemCount: _friendsList.length, + itemBuilder: (c, i) => _friendsList[i].accepted + ? AcceptedFriendTile( + friend: _friendsList[i], + user: _usersInfo.getUser(_friendsList[i].id), + ) + : PendingFriendTile( + friend: _friendsList[i], + user: _usersInfo.getUser(_friendsList[i].id), + onRespond: _respondRequest, + )), ), - ], ); } + + /// Respond to friendship request + Future _respondRequest(Friend f, bool accept) async { + loading = true; + + if (!await _friendsHelper.respondRequest(f.id, accept)) + Scaffold.of(context).showSnackBar(SnackBar( + content: Text(tr("Could not respond to friendship request!")))); + + // Load the list of friends again + _loadList(); + } }