mirror of
				https://gitlab.com/comunic/comunicmobile
				synced 2025-11-04 04:04:18 +00:00 
			
		
		
		
	Create user access denied route
This commit is contained in:
		@@ -2,6 +2,7 @@ import 'package:comunic/helpers/database/friends_database_helper.dart';
 | 
				
			|||||||
import 'package:comunic/lists/friends_list.dart';
 | 
					import 'package:comunic/lists/friends_list.dart';
 | 
				
			||||||
import 'package:comunic/models/api_request.dart';
 | 
					import 'package:comunic/models/api_request.dart';
 | 
				
			||||||
import 'package:comunic/models/friend.dart';
 | 
					import 'package:comunic/models/friend.dart';
 | 
				
			||||||
 | 
					import 'package:comunic/models/friend_status.dart';
 | 
				
			||||||
import 'package:meta/meta.dart';
 | 
					import 'package:meta/meta.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// Friends helper
 | 
					/// Friends helper
 | 
				
			||||||
@@ -65,7 +66,7 @@ class FriendsHelper {
 | 
				
			|||||||
          "accept": accept.toString()
 | 
					          "accept": accept.toString()
 | 
				
			||||||
        }).exec();
 | 
					        }).exec();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return response.code == 200;
 | 
					    return response.isOK;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /// Update following status for a friend
 | 
					  /// Update following status for a friend
 | 
				
			||||||
@@ -91,6 +92,28 @@ class FriendsHelper {
 | 
				
			|||||||
    return response.code == 200;
 | 
					    return response.code == 200;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /// Get friendship status. Throw an exception in case of failure
 | 
				
			||||||
 | 
					  Future<FriendStatus> getFriendshipStatus(int userID) async {
 | 
				
			||||||
 | 
					    final response = await APIRequest(
 | 
				
			||||||
 | 
					      uri: "friends/getStatus",
 | 
				
			||||||
 | 
					      needLogin: true,
 | 
				
			||||||
 | 
					      args: {"friendID": userID.toString()},
 | 
				
			||||||
 | 
					    ).exec();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (response.code != 200)
 | 
				
			||||||
 | 
					      throw Exception("Could not get friendship status!");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    final obj = response.getObject();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return FriendStatus(
 | 
				
			||||||
 | 
					      userID: userID,
 | 
				
			||||||
 | 
					      areFriend: obj["are_friend"],
 | 
				
			||||||
 | 
					      sentRequest: obj["sent_request"],
 | 
				
			||||||
 | 
					      receivedRequest: obj["received_request"],
 | 
				
			||||||
 | 
					      following: obj["following"],
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /// Get and return the list of friends of an other user
 | 
					  /// Get and return the list of friends of an other user
 | 
				
			||||||
  ///
 | 
					  ///
 | 
				
			||||||
  /// Throws an Exception if could not get the list of friends
 | 
					  /// Throws an Exception if could not get the list of friends
 | 
				
			||||||
@@ -106,4 +129,24 @@ class FriendsHelper {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    return Set<int>.from(response.getArray());
 | 
					    return Set<int>.from(response.getArray());
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /// Send a friendship request to a specified user
 | 
				
			||||||
 | 
					  Future<bool> sendRequest(int userID) async {
 | 
				
			||||||
 | 
					    return (await APIRequest(
 | 
				
			||||||
 | 
					      uri: "friends/sendRequest",
 | 
				
			||||||
 | 
					      needLogin: true,
 | 
				
			||||||
 | 
					      args: {"friendID": userID.toString()},
 | 
				
			||||||
 | 
					    ).exec())
 | 
				
			||||||
 | 
					        .isOK;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /// Cancel a friendship request
 | 
				
			||||||
 | 
					  Future<bool> cancelRequest(int userID) async {
 | 
				
			||||||
 | 
					    return (await APIRequest(
 | 
				
			||||||
 | 
					      uri: "friends/removeRequest",
 | 
				
			||||||
 | 
					      needLogin: true,
 | 
				
			||||||
 | 
					      args: {"friendID": userID.toString()},
 | 
				
			||||||
 | 
					    ).exec())
 | 
				
			||||||
 | 
					        .isOK;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,7 +12,11 @@ import 'package:comunic/models/user.dart';
 | 
				
			|||||||
/// @author Pierre HUBERT
 | 
					/// @author Pierre HUBERT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// Handle advanced information error
 | 
					/// Handle advanced information error
 | 
				
			||||||
enum GetUserAdvancedInformationErrorCause { NOT_FOUND, NETWORK_ERROR }
 | 
					enum GetUserAdvancedInformationErrorCause {
 | 
				
			||||||
 | 
					  NOT_FOUND,
 | 
				
			||||||
 | 
					  NETWORK_ERROR,
 | 
				
			||||||
 | 
					  NOT_AUTHORIZED
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class GetUserAdvancedUserError extends Error {
 | 
					class GetUserAdvancedUserError extends Error {
 | 
				
			||||||
  final GetUserAdvancedInformationErrorCause cause;
 | 
					  final GetUserAdvancedInformationErrorCause cause;
 | 
				
			||||||
@@ -76,6 +80,11 @@ class UsersHelper {
 | 
				
			|||||||
    return list;
 | 
					    return list;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /// Get information about a single user. Throws in case of failure
 | 
				
			||||||
 | 
					  Future<User> getSingleWithThrow(int user) async {
 | 
				
			||||||
 | 
					    return (await getListWithThrow(Set<int>()..add(user)))[0];
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /// Get users information from a given [Set]
 | 
					  /// Get users information from a given [Set]
 | 
				
			||||||
  Future<UsersList> getList(Set<int> users,
 | 
					  Future<UsersList> getList(Set<int> users,
 | 
				
			||||||
      {bool forceDownload = false}) async {
 | 
					      {bool forceDownload = false}) async {
 | 
				
			||||||
@@ -125,6 +134,9 @@ class UsersHelper {
 | 
				
			|||||||
      if (response.code == 404)
 | 
					      if (response.code == 404)
 | 
				
			||||||
        cause = GetUserAdvancedInformationErrorCause.NOT_FOUND;
 | 
					        cause = GetUserAdvancedInformationErrorCause.NOT_FOUND;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      if (response.code == 401)
 | 
				
			||||||
 | 
					        cause = GetUserAdvancedInformationErrorCause.NOT_AUTHORIZED;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      throw new GetUserAdvancedUserError(cause);
 | 
					      throw new GetUserAdvancedUserError(cause);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										27
									
								
								lib/models/friend_status.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								lib/models/friend_status.dart
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
				
			|||||||
 | 
					import 'package:meta/meta.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Simple friendship status
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// @author Pierre HUBERT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class FriendStatus {
 | 
				
			||||||
 | 
					  final int userID;
 | 
				
			||||||
 | 
					  final bool areFriend;
 | 
				
			||||||
 | 
					  final bool sentRequest;
 | 
				
			||||||
 | 
					  final bool receivedRequest;
 | 
				
			||||||
 | 
					  final bool following;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const FriendStatus({
 | 
				
			||||||
 | 
					    @required this.userID,
 | 
				
			||||||
 | 
					    @required this.areFriend,
 | 
				
			||||||
 | 
					    @required this.sentRequest,
 | 
				
			||||||
 | 
					    @required this.receivedRequest,
 | 
				
			||||||
 | 
					    @required this.following,
 | 
				
			||||||
 | 
					  })  : assert(userID != null),
 | 
				
			||||||
 | 
					        assert(areFriend != null),
 | 
				
			||||||
 | 
					        assert(sentRequest != null),
 | 
				
			||||||
 | 
					        assert(receivedRequest != null),
 | 
				
			||||||
 | 
					        assert(following != null);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  bool get noRequestExchanged => !areFriend && !sentRequest && !receivedRequest;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										120
									
								
								lib/ui/routes/user_access_denied_route.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										120
									
								
								lib/ui/routes/user_access_denied_route.dart
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,120 @@
 | 
				
			|||||||
 | 
					import 'package:comunic/helpers/friends_helper.dart';
 | 
				
			||||||
 | 
					import 'package:comunic/helpers/users_helper.dart';
 | 
				
			||||||
 | 
					import 'package:comunic/models/friend_status.dart';
 | 
				
			||||||
 | 
					import 'package:comunic/models/user.dart';
 | 
				
			||||||
 | 
					import 'package:comunic/ui/routes/user_page_route.dart';
 | 
				
			||||||
 | 
					import 'package:comunic/ui/widgets/FrienshipStatusWidget.dart';
 | 
				
			||||||
 | 
					import 'package:comunic/ui/widgets/account_image_widget.dart';
 | 
				
			||||||
 | 
					import 'package:comunic/utils/intl_utils.dart';
 | 
				
			||||||
 | 
					import 'package:comunic/utils/ui_utils.dart';
 | 
				
			||||||
 | 
					import 'package:flutter/material.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// User access denied route
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// @author Pierre HUBERT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class UserAccessDeniedRoute extends StatefulWidget {
 | 
				
			||||||
 | 
					  final int userID;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const UserAccessDeniedRoute({Key key, @required this.userID})
 | 
				
			||||||
 | 
					      : assert(userID != null),
 | 
				
			||||||
 | 
					        super(key: key);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @override
 | 
				
			||||||
 | 
					  _UserAccessDeniedRouteState createState() => _UserAccessDeniedRouteState();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class _UserAccessDeniedRouteState extends State<UserAccessDeniedRoute> {
 | 
				
			||||||
 | 
					  final UsersHelper usersHelper = UsersHelper();
 | 
				
			||||||
 | 
					  final FriendsHelper friendsHelper = FriendsHelper();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  GlobalKey<RefreshIndicatorState> _refreshIndicatorKey =
 | 
				
			||||||
 | 
					      GlobalKey<RefreshIndicatorState>();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  FriendStatus _status;
 | 
				
			||||||
 | 
					  User _user;
 | 
				
			||||||
 | 
					  bool _error = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  void setError(bool e) => setState(() => _error = e);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @override
 | 
				
			||||||
 | 
					  void didChangeDependencies() {
 | 
				
			||||||
 | 
					    super.didChangeDependencies();
 | 
				
			||||||
 | 
					    refresh();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Future<void> refresh() async {
 | 
				
			||||||
 | 
					    try {
 | 
				
			||||||
 | 
					      final status = await friendsHelper.getFriendshipStatus(widget.userID);
 | 
				
			||||||
 | 
					      final user = await usersHelper.getSingleWithThrow(widget.userID);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      // Check if the two users are friend now
 | 
				
			||||||
 | 
					      if (status.areFriend)
 | 
				
			||||||
 | 
					        Navigator.of(context).pushReplacement(
 | 
				
			||||||
 | 
					          MaterialPageRoute(
 | 
				
			||||||
 | 
					            builder: (c) => UserPageRoute(
 | 
				
			||||||
 | 
					                  userID: widget.userID,
 | 
				
			||||||
 | 
					                ),
 | 
				
			||||||
 | 
					          ),
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      setState(() {
 | 
				
			||||||
 | 
					        _status = status;
 | 
				
			||||||
 | 
					        _user = user;
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    } catch (e) {
 | 
				
			||||||
 | 
					      setError(true);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @override
 | 
				
			||||||
 | 
					  Widget build(BuildContext context) {
 | 
				
			||||||
 | 
					    if (!_error && _status == null) return buildLoadingPage(showAppBar: true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return Scaffold(
 | 
				
			||||||
 | 
					      appBar: AppBar(
 | 
				
			||||||
 | 
					        title: Text(_error ? "Error" : _user.displayName),
 | 
				
			||||||
 | 
					      ),
 | 
				
			||||||
 | 
					      body: RefreshIndicator(
 | 
				
			||||||
 | 
					        key: _refreshIndicatorKey,
 | 
				
			||||||
 | 
					        onRefresh: refresh,
 | 
				
			||||||
 | 
					        child: ListView.builder(
 | 
				
			||||||
 | 
					          itemBuilder: (c, i) => _scrollBuild(),
 | 
				
			||||||
 | 
					          itemCount: 1,
 | 
				
			||||||
 | 
					        ),
 | 
				
			||||||
 | 
					      ),
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Widget _scrollBuild() {
 | 
				
			||||||
 | 
					    if (_error) return _buildError();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return _buildPage();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Widget _buildError() {
 | 
				
			||||||
 | 
					    return buildErrorCard("Could get information about your friendship!");
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Widget _buildPage() {
 | 
				
			||||||
 | 
					    return Center(
 | 
				
			||||||
 | 
					      child: Column(
 | 
				
			||||||
 | 
					        children: <Widget>[
 | 
				
			||||||
 | 
					          AccountImageWidget(
 | 
				
			||||||
 | 
					            user: _user,
 | 
				
			||||||
 | 
					            width: 75,
 | 
				
			||||||
 | 
					          ),
 | 
				
			||||||
 | 
					          Text(
 | 
				
			||||||
 | 
					            _user.displayName,
 | 
				
			||||||
 | 
					            style: TextStyle(fontSize: 25.0),
 | 
				
			||||||
 | 
					          ),
 | 
				
			||||||
 | 
					          Text(tr("This account is private.")),
 | 
				
			||||||
 | 
					          FriendshipStatusWidget(
 | 
				
			||||||
 | 
					            status: _status,
 | 
				
			||||||
 | 
					            onFriendshipUpdated: () => _refreshIndicatorKey.currentState.show(),
 | 
				
			||||||
 | 
					          )
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					      ),
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -2,6 +2,7 @@ import 'package:comunic/helpers/posts_helper.dart';
 | 
				
			|||||||
import 'package:comunic/helpers/users_helper.dart';
 | 
					import 'package:comunic/helpers/users_helper.dart';
 | 
				
			||||||
import 'package:comunic/models/advanced_user_info.dart';
 | 
					import 'package:comunic/models/advanced_user_info.dart';
 | 
				
			||||||
import 'package:comunic/ui/routes/other_friends_lists_route.dart';
 | 
					import 'package:comunic/ui/routes/other_friends_lists_route.dart';
 | 
				
			||||||
 | 
					import 'package:comunic/ui/routes/user_access_denied_route.dart';
 | 
				
			||||||
import 'package:comunic/ui/widgets/network_image_widget.dart';
 | 
					import 'package:comunic/ui/widgets/network_image_widget.dart';
 | 
				
			||||||
import 'package:comunic/ui/widgets/posts_list_widget.dart';
 | 
					import 'package:comunic/ui/widgets/posts_list_widget.dart';
 | 
				
			||||||
import 'package:comunic/utils/conversations_utils.dart';
 | 
					import 'package:comunic/utils/conversations_utils.dart';
 | 
				
			||||||
@@ -57,8 +58,17 @@ class _UserPageRouteState extends State<UserPageRoute> {
 | 
				
			|||||||
      });
 | 
					      });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      _setStatus(_PageStatus.READY);
 | 
					      _setStatus(_PageStatus.READY);
 | 
				
			||||||
    } on GetUserAdvancedUserError {
 | 
					    } on GetUserAdvancedUserError catch (e) {
 | 
				
			||||||
      _setStatus(_PageStatus.ERROR);
 | 
					      _setStatus(_PageStatus.ERROR);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      if (e.cause == GetUserAdvancedInformationErrorCause.NOT_AUTHORIZED)
 | 
				
			||||||
 | 
					        Navigator.of(context).pushReplacement(
 | 
				
			||||||
 | 
					          MaterialPageRoute(
 | 
				
			||||||
 | 
					            builder: (c) => UserAccessDeniedRoute(
 | 
				
			||||||
 | 
					                  userID: widget.userID,
 | 
				
			||||||
 | 
					                ),
 | 
				
			||||||
 | 
					          ),
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										114
									
								
								lib/ui/widgets/FrienshipStatusWidget.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										114
									
								
								lib/ui/widgets/FrienshipStatusWidget.dart
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,114 @@
 | 
				
			|||||||
 | 
					import 'package:comunic/helpers/friends_helper.dart';
 | 
				
			||||||
 | 
					import 'package:comunic/models/friend_status.dart';
 | 
				
			||||||
 | 
					import 'package:comunic/utils/intl_utils.dart';
 | 
				
			||||||
 | 
					import 'package:comunic/utils/ui_utils.dart';
 | 
				
			||||||
 | 
					import 'package:flutter/material.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/// Friendship status widget
 | 
				
			||||||
 | 
					///
 | 
				
			||||||
 | 
					/// @author Pierre HUBERT
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const WhiteTextColorStyle = TextStyle(color: Colors.white);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class FriendshipStatusWidget extends StatefulWidget {
 | 
				
			||||||
 | 
					  final FriendStatus status;
 | 
				
			||||||
 | 
					  final void Function() onFriendshipUpdated;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const FriendshipStatusWidget({
 | 
				
			||||||
 | 
					    Key key,
 | 
				
			||||||
 | 
					    @required this.status,
 | 
				
			||||||
 | 
					    @required this.onFriendshipUpdated,
 | 
				
			||||||
 | 
					  })  : assert(status != null),
 | 
				
			||||||
 | 
					        assert(onFriendshipUpdated != null),
 | 
				
			||||||
 | 
					        super(key: key);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @override
 | 
				
			||||||
 | 
					  _FriendshipStatusWidgetState createState() => _FriendshipStatusWidgetState();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class _FriendshipStatusWidgetState extends State<FriendshipStatusWidget> {
 | 
				
			||||||
 | 
					  final FriendsHelper _friendsHelper = FriendsHelper();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  bool _sentRequest = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  int get friendID => widget.status.userID;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  void setSentRequest(bool sent) => setState(() => _sentRequest = sent);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @override
 | 
				
			||||||
 | 
					  void didUpdateWidget(FriendshipStatusWidget oldWidget) {
 | 
				
			||||||
 | 
					    super.didUpdateWidget(oldWidget);
 | 
				
			||||||
 | 
					    setSentRequest(false);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @override
 | 
				
			||||||
 | 
					  Widget build(BuildContext context) {
 | 
				
			||||||
 | 
					    if (_sentRequest) return Container();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // No request sent yet
 | 
				
			||||||
 | 
					    if (widget.status.noRequestExchanged) {
 | 
				
			||||||
 | 
					      return RaisedButton(
 | 
				
			||||||
 | 
					        child: Text(tr("Send request").toUpperCase()),
 | 
				
			||||||
 | 
					        onPressed: () =>
 | 
				
			||||||
 | 
					            executeRequest(() => _friendsHelper.sendRequest(friendID)),
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Already sent a friendship request
 | 
				
			||||||
 | 
					    if (widget.status.sentRequest) {
 | 
				
			||||||
 | 
					      return RaisedButton(
 | 
				
			||||||
 | 
					        child: Text(
 | 
				
			||||||
 | 
					          tr("Cancel request").toUpperCase(),
 | 
				
			||||||
 | 
					          style: WhiteTextColorStyle,
 | 
				
			||||||
 | 
					        ),
 | 
				
			||||||
 | 
					        color: Colors.red,
 | 
				
			||||||
 | 
					        onPressed: () =>
 | 
				
			||||||
 | 
					            executeRequest(() => _friendsHelper.cancelRequest(friendID)),
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Received a friendship request
 | 
				
			||||||
 | 
					    if (widget.status.receivedRequest) {
 | 
				
			||||||
 | 
					      return Column(
 | 
				
			||||||
 | 
					        children: <Widget>[
 | 
				
			||||||
 | 
					          RaisedButton(
 | 
				
			||||||
 | 
					            child: Text(
 | 
				
			||||||
 | 
					              tr("Accept request").toUpperCase(),
 | 
				
			||||||
 | 
					              style: WhiteTextColorStyle,
 | 
				
			||||||
 | 
					            ),
 | 
				
			||||||
 | 
					            color: Colors.green,
 | 
				
			||||||
 | 
					            onPressed: () => executeRequest(
 | 
				
			||||||
 | 
					                () => _friendsHelper.respondRequest(friendID, true)),
 | 
				
			||||||
 | 
					          ),
 | 
				
			||||||
 | 
					          RaisedButton(
 | 
				
			||||||
 | 
					            child: Text(
 | 
				
			||||||
 | 
					              tr("Reject request").toUpperCase(),
 | 
				
			||||||
 | 
					              style: WhiteTextColorStyle,
 | 
				
			||||||
 | 
					            ),
 | 
				
			||||||
 | 
					            color: Colors.red,
 | 
				
			||||||
 | 
					            onPressed: () => executeRequest(
 | 
				
			||||||
 | 
					                () => _friendsHelper.respondRequest(friendID, false)),
 | 
				
			||||||
 | 
					          )
 | 
				
			||||||
 | 
					        ],
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // The two users are friends, offers to follow him
 | 
				
			||||||
 | 
					    return RaisedButton(
 | 
				
			||||||
 | 
					      child: Text((widget.status.following ? tr("Following") : tr("Follow"))
 | 
				
			||||||
 | 
					          .toUpperCase()),
 | 
				
			||||||
 | 
					      onPressed: () => executeRequest(() =>
 | 
				
			||||||
 | 
					          _friendsHelper.setFollowing(friendID, !widget.status.following)),
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  /// Send friendship request
 | 
				
			||||||
 | 
					  Future<void> executeRequest(Future<bool> Function() func) async {
 | 
				
			||||||
 | 
					    setSentRequest(true);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!await func())
 | 
				
			||||||
 | 
					      showSimpleSnack(context, tr("Could not update your membership!"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    widget.onFriendshipUpdated();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -21,7 +21,7 @@ Widget buildLoadingPage({
 | 
				
			|||||||
  return Scaffold(
 | 
					  return Scaffold(
 | 
				
			||||||
    appBar: showAppBar
 | 
					    appBar: showAppBar
 | 
				
			||||||
        ? AppBar(
 | 
					        ? AppBar(
 | 
				
			||||||
            title: Text(routeTitle),
 | 
					            title: routeTitle == null ? null : Text(routeTitle),
 | 
				
			||||||
          )
 | 
					          )
 | 
				
			||||||
        : null,
 | 
					        : null,
 | 
				
			||||||
    body: buildCenteredProgressBar(),
 | 
					    body: buildCenteredProgressBar(),
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user