mirror of
				https://gitlab.com/comunic/comunicmobile
				synced 2025-11-04 12:14:11 +00:00 
			
		
		
		
	Can remove a friend from the list of friends
This commit is contained in:
		@@ -51,4 +51,15 @@ class FriendsHelper {
 | 
			
		||||
 | 
			
		||||
    return response.code == 200;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /// Remove a friend from the list
 | 
			
		||||
  Future<bool> removeFriend(int friendID) async {
 | 
			
		||||
    final response = await APIRequest(
 | 
			
		||||
      uri: "friends/remove",
 | 
			
		||||
      needLogin: true,
 | 
			
		||||
      args: {"friendID" : friendID.toString()}
 | 
			
		||||
    ).exec();
 | 
			
		||||
 | 
			
		||||
    return response.code == 200;
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -39,8 +39,10 @@ class _FriendsListScreenState extends SafeState<FriendsListScreen> {
 | 
			
		||||
 | 
			
		||||
  set loading(bool loading) => setState(() => _loading = loading);
 | 
			
		||||
 | 
			
		||||
  void _gotError() =>
 | 
			
		||||
  void _gotError() {
 | 
			
		||||
    loading = false;
 | 
			
		||||
    error = _friendsList == null ? _ErrorsLevel.MAJOR : _ErrorsLevel.MINOR;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
  void didChangeDependencies() {
 | 
			
		||||
@@ -109,6 +111,7 @@ class _FriendsListScreenState extends SafeState<FriendsListScreen> {
 | 
			
		||||
                  ? AcceptedFriendTile(
 | 
			
		||||
                      friend: _friendsList[i],
 | 
			
		||||
                      user: _usersInfo.getUser(_friendsList[i].id),
 | 
			
		||||
                      onRequestDelete: _deleteFriend,
 | 
			
		||||
                    )
 | 
			
		||||
                  : PendingFriendTile(
 | 
			
		||||
                      friend: _friendsList[i],
 | 
			
		||||
@@ -125,10 +128,45 @@ class _FriendsListScreenState extends SafeState<FriendsListScreen> {
 | 
			
		||||
    loading = true;
 | 
			
		||||
 | 
			
		||||
    if (!await _friendsHelper.respondRequest(f.id, accept))
 | 
			
		||||
      Scaffold.of(context).showSnackBar(SnackBar(
 | 
			
		||||
          content: Text(tr("Could not respond to friendship request!"))));
 | 
			
		||||
      showSimpleSnack(context, tr("Could not respond to friendship request!"));
 | 
			
		||||
 | 
			
		||||
    // Load the list of friends again
 | 
			
		||||
    _loadList();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  /// Handles deletion request of a friend
 | 
			
		||||
  Future<void> _deleteFriend(Friend f) async {
 | 
			
		||||
    final choice = await showDialog<bool>(
 | 
			
		||||
      context: context,
 | 
			
		||||
      builder: (b) => AlertDialog(
 | 
			
		||||
            title: Text(tr("Delete friend")),
 | 
			
		||||
            content: Text(tr(
 | 
			
		||||
                "Are you sure do you want to remove this friend from your list of friends ? A friendship request will have to be sent to get this user back to your list!")),
 | 
			
		||||
            actions: <Widget>[
 | 
			
		||||
              FlatButton(
 | 
			
		||||
                onPressed: () => Navigator.pop(context, false),
 | 
			
		||||
                child: Text(tr("Cancel").toUpperCase()),
 | 
			
		||||
              ),
 | 
			
		||||
              FlatButton(
 | 
			
		||||
                onPressed: () => Navigator.pop(context, true),
 | 
			
		||||
                child: Text(
 | 
			
		||||
                  tr("Confirm").toUpperCase(),
 | 
			
		||||
                  style: TextStyle(color: Colors.red),
 | 
			
		||||
                ),
 | 
			
		||||
              ),
 | 
			
		||||
            ],
 | 
			
		||||
          ),
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    if (choice == null || !choice) return;
 | 
			
		||||
 | 
			
		||||
    // Forward the request to the server
 | 
			
		||||
    loading = true;
 | 
			
		||||
    if (!await _friendsHelper.removeFriend(f.id))
 | 
			
		||||
      showSimpleSnack(
 | 
			
		||||
          context, tr("Could not delete this person from your friends list!"));
 | 
			
		||||
 | 
			
		||||
    // Refresh list
 | 
			
		||||
    _loadList();
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -9,14 +9,23 @@ import 'package:flutter/material.dart';
 | 
			
		||||
///
 | 
			
		||||
/// @author Pierre HUBERT
 | 
			
		||||
 | 
			
		||||
enum _FriendMenuChoices { REMOVE }
 | 
			
		||||
 | 
			
		||||
typedef OnRequestDeleteFriend = void Function(Friend);
 | 
			
		||||
 | 
			
		||||
class AcceptedFriendTile extends StatelessWidget {
 | 
			
		||||
  final Friend friend;
 | 
			
		||||
  final User user;
 | 
			
		||||
  final OnRequestDeleteFriend onRequestDelete;
 | 
			
		||||
 | 
			
		||||
  const AcceptedFriendTile(
 | 
			
		||||
      {Key key, @required this.friend, @required this.user})
 | 
			
		||||
      {Key key,
 | 
			
		||||
      @required this.friend,
 | 
			
		||||
      @required this.user,
 | 
			
		||||
      @required this.onRequestDelete})
 | 
			
		||||
      : assert(friend != null),
 | 
			
		||||
        assert(user != null),
 | 
			
		||||
        assert(onRequestDelete != null),
 | 
			
		||||
        super(key: key);
 | 
			
		||||
 | 
			
		||||
  @override
 | 
			
		||||
@@ -34,6 +43,26 @@ class AcceptedFriendTile extends StatelessWidget {
 | 
			
		||||
          : Text(
 | 
			
		||||
              diffTimeFromNowToStr(friend.lastActive),
 | 
			
		||||
            ),
 | 
			
		||||
      trailing: PopupMenuButton<_FriendMenuChoices>(
 | 
			
		||||
        itemBuilder: (c) => [
 | 
			
		||||
              PopupMenuItem(
 | 
			
		||||
                child: Text(tr("Remove")),
 | 
			
		||||
                value: _FriendMenuChoices.REMOVE,
 | 
			
		||||
              )
 | 
			
		||||
            ],
 | 
			
		||||
        onSelected: _selectedMenuOption,
 | 
			
		||||
      ),
 | 
			
		||||
    );
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  void _selectedMenuOption(_FriendMenuChoices value) {
 | 
			
		||||
    if (value == null) return;
 | 
			
		||||
 | 
			
		||||
    switch (value) {
 | 
			
		||||
      //Delete friend
 | 
			
		||||
      case _FriendMenuChoices.REMOVE:
 | 
			
		||||
        onRequestDelete(friend);
 | 
			
		||||
        break;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -60,3 +60,9 @@ void showImageFullScreen(BuildContext context, String url) {
 | 
			
		||||
 | 
			
		||||
  }));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// Show simple snack
 | 
			
		||||
void showSimpleSnack(BuildContext context, String message) {
 | 
			
		||||
  Scaffold.of(context).showSnackBar(SnackBar(content: Text(message)));
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user