mirror of
				https://gitlab.com/comunic/comunicmobile
				synced 2025-10-31 10:14:50 +00:00 
			
		
		
		
	Can get the list of friends of a user
This commit is contained in:
		| @@ -9,7 +9,6 @@ import 'package:meta/meta.dart'; | |||||||
| /// @author Pierre HUBERT | /// @author Pierre HUBERT | ||||||
|  |  | ||||||
| class FriendsHelper { | class FriendsHelper { | ||||||
|  |  | ||||||
|   final FriendsDatabaseHelper _friendsDatabaseHelper = FriendsDatabaseHelper(); |   final FriendsDatabaseHelper _friendsDatabaseHelper = FriendsDatabaseHelper(); | ||||||
|  |  | ||||||
|   /// Get the list of friends of the user from the server |   /// Get the list of friends of the user from the server | ||||||
| @@ -50,10 +49,8 @@ class FriendsHelper { | |||||||
|  |  | ||||||
|   /// Get the list, either from an online or an offline source |   /// Get the list, either from an online or an offline source | ||||||
|   Future<FriendsList> getList({@required bool online}) async { |   Future<FriendsList> getList({@required bool online}) async { | ||||||
|  |  | ||||||
|     if (online) |     if (online) | ||||||
|       return await _downloadList(); |       return await _downloadList(); | ||||||
|  |  | ||||||
|     else |     else | ||||||
|       return FriendsList()..addAll(await _friendsDatabaseHelper.getAll()); |       return FriendsList()..addAll(await _friendsDatabaseHelper.getAll()); | ||||||
|   } |   } | ||||||
| @@ -79,8 +76,7 @@ class FriendsHelper { | |||||||
|         args: { |         args: { | ||||||
|           "friendID": friendID.toString(), |           "friendID": friendID.toString(), | ||||||
|           "follow": follow.toString() |           "follow": follow.toString() | ||||||
|       } |         }).exec(); | ||||||
|     ).exec(); |  | ||||||
|  |  | ||||||
|     return response.code == 200; |     return response.code == 200; | ||||||
|   } |   } | ||||||
| @@ -90,9 +86,24 @@ class FriendsHelper { | |||||||
|     final response = await APIRequest( |     final response = await APIRequest( | ||||||
|         uri: "friends/remove", |         uri: "friends/remove", | ||||||
|         needLogin: true, |         needLogin: true, | ||||||
|       args: {"friendID" : friendID.toString()} |         args: {"friendID": friendID.toString()}).exec(); | ||||||
|     ).exec(); |  | ||||||
|  |  | ||||||
|     return response.code == 200; |     return response.code == 200; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   /// Get and return the list of friends of an other user | ||||||
|  |   /// | ||||||
|  |   /// Throws an Exception if could not get the list of friends | ||||||
|  |   Future<Set<int>> getOtherUserList(int userID) async { | ||||||
|  |     final response = await APIRequest( | ||||||
|  |       uri: "friends/get_user_list", | ||||||
|  |       needLogin: true, | ||||||
|  |       args: {"userID": userID.toString()}, | ||||||
|  |     ).exec(); | ||||||
|  |  | ||||||
|  |     if (response.code != 200) | ||||||
|  |       throw new Exception("Could not get the list of friends of this user!"); | ||||||
|  |  | ||||||
|  |     return Set<int>.from(response.getArray()); | ||||||
|  |   } | ||||||
| } | } | ||||||
|   | |||||||
							
								
								
									
										114
									
								
								lib/ui/routes/other_friends_lists_route.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										114
									
								
								lib/ui/routes/other_friends_lists_route.dart
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,114 @@ | |||||||
|  | import 'package:comunic/helpers/friends_helper.dart'; | ||||||
|  | import 'package:comunic/helpers/users_helper.dart'; | ||||||
|  | import 'package:comunic/lists/users_list.dart'; | ||||||
|  | import 'package:comunic/models/user.dart'; | ||||||
|  | import 'package:comunic/ui/tiles/simple_user_tile.dart'; | ||||||
|  | import 'package:comunic/utils/intl_utils.dart'; | ||||||
|  | import 'package:comunic/utils/navigation_utils.dart'; | ||||||
|  | import 'package:comunic/utils/ui_utils.dart'; | ||||||
|  | import 'package:flutter/material.dart'; | ||||||
|  |  | ||||||
|  | /// Other friends list route (not intended to display current user friends list) | ||||||
|  | /// | ||||||
|  | /// @author Pierre HUBERT | ||||||
|  |  | ||||||
|  | class OtherUserFriendsListRoute extends StatefulWidget { | ||||||
|  |   final User user; | ||||||
|  |  | ||||||
|  |   const OtherUserFriendsListRoute({ | ||||||
|  |     Key key, | ||||||
|  |     @required this.user, | ||||||
|  |   })  : assert(user != null), | ||||||
|  |         super(key: key); | ||||||
|  |  | ||||||
|  |   @override | ||||||
|  |   _OtherUserFriendsListRouteState createState() => | ||||||
|  |       _OtherUserFriendsListRouteState(); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | class _OtherUserFriendsListRouteState extends State<OtherUserFriendsListRoute> { | ||||||
|  |   final FriendsHelper friendsHelper = FriendsHelper(); | ||||||
|  |   final UsersHelper usersHelper = UsersHelper(); | ||||||
|  |  | ||||||
|  |   UsersList _list; | ||||||
|  |   bool _error = false; | ||||||
|  |  | ||||||
|  |   String get _routeName => | ||||||
|  |       tr("Friends of %name%", args: {"name": widget.user.displayName}); | ||||||
|  |  | ||||||
|  |   void setError(bool e) => setState(() => _error = e); | ||||||
|  |  | ||||||
|  |   @override | ||||||
|  |   void didChangeDependencies() { | ||||||
|  |     super.didChangeDependencies(); | ||||||
|  |     load(); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   /// Load the list of friends of the user | ||||||
|  |   Future<void> load() async { | ||||||
|  |     setError(false); | ||||||
|  |  | ||||||
|  |     try { | ||||||
|  |       final list = await usersHelper.getListWithThrow( | ||||||
|  |           await friendsHelper.getOtherUserList(widget.user.id)); | ||||||
|  |  | ||||||
|  |       setState(() { | ||||||
|  |         _list = list; | ||||||
|  |       }); | ||||||
|  |     } catch (e, st) { | ||||||
|  |       print(e); | ||||||
|  |       print(st); | ||||||
|  |       setError(true); | ||||||
|  |     } | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   @override | ||||||
|  |   Widget build(BuildContext context) { | ||||||
|  |     if (_error) return _buildError(); | ||||||
|  |  | ||||||
|  |     if (_list == null) | ||||||
|  |       return buildLoadingPage( | ||||||
|  |         showAppBar: true, | ||||||
|  |         routeTitle: _routeName, | ||||||
|  |       ); | ||||||
|  |  | ||||||
|  |     return Scaffold( | ||||||
|  |       appBar: AppBar( | ||||||
|  |         title: Text(_routeName), | ||||||
|  |       ), | ||||||
|  |       body: ListView.builder( | ||||||
|  |         itemCount: _list.length, | ||||||
|  |         itemBuilder: (c, i) => SimpleUserTile( | ||||||
|  |               user: _list[i], | ||||||
|  |               onTap: (u) => openUserPage( | ||||||
|  |                     context: context, | ||||||
|  |                     userID: u.id, | ||||||
|  |                   ), | ||||||
|  |             ), | ||||||
|  |       ), | ||||||
|  |     ); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  |   Widget _buildError() { | ||||||
|  |     return Scaffold( | ||||||
|  |       appBar: AppBar( | ||||||
|  |         title: Text(_routeName), | ||||||
|  |       ), | ||||||
|  |       body: buildErrorCard( | ||||||
|  |         tr( | ||||||
|  |           "Could not get the list of friends of %name% !", | ||||||
|  |           args: {"name": widget.user.displayName}, | ||||||
|  |         ), | ||||||
|  |         actions: [ | ||||||
|  |           FlatButton( | ||||||
|  |             child: Text( | ||||||
|  |               tr("Try again").toUpperCase(), | ||||||
|  |               style: TextStyle(color: Colors.white), | ||||||
|  |             ), | ||||||
|  |             onPressed: load, | ||||||
|  |           ) | ||||||
|  |         ], | ||||||
|  |       ), | ||||||
|  |     ); | ||||||
|  |   } | ||||||
|  | } | ||||||
| @@ -1,8 +1,10 @@ | |||||||
| import 'package:comunic/helpers/posts_helper.dart'; | 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/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/intl_utils.dart'; | import 'package:comunic/utils/intl_utils.dart'; | ||||||
| import 'package:comunic/utils/ui_utils.dart'; | import 'package:comunic/utils/ui_utils.dart'; | ||||||
| import 'package:flutter/material.dart'; | import 'package:flutter/material.dart'; | ||||||
| @@ -13,6 +15,8 @@ import 'package:flutter/material.dart'; | |||||||
|  |  | ||||||
| enum _PageStatus { LOADING, ERROR, READY } | enum _PageStatus { LOADING, ERROR, READY } | ||||||
|  |  | ||||||
|  | enum _MenuOptions { FRIENDS_LIST } | ||||||
|  |  | ||||||
| class UserPageRoute extends StatefulWidget { | class UserPageRoute extends StatefulWidget { | ||||||
|   final int userID; |   final int userID; | ||||||
|  |  | ||||||
| @@ -105,6 +109,7 @@ class _UserPageRouteState extends State<UserPageRoute> { | |||||||
|             NetworkImageWidget( |             NetworkImageWidget( | ||||||
|               url: _userInfo.accountImageURL, |               url: _userInfo.accountImageURL, | ||||||
|               height: _appBarHeight, |               height: _appBarHeight, | ||||||
|  |               roundedEdges: false, | ||||||
|             ), |             ), | ||||||
|             // This gradient ensures that the toolbar icons are distinct |             // This gradient ensures that the toolbar icons are distinct | ||||||
|             // against the background image. |             // against the background image. | ||||||
| @@ -130,6 +135,26 @@ class _UserPageRouteState extends State<UserPageRoute> { | |||||||
|           ], |           ], | ||||||
|         ), |         ), | ||||||
|       ), |       ), | ||||||
|  |       actions: <Widget>[ | ||||||
|  |         IconButton( | ||||||
|  |           icon: Icon( | ||||||
|  |             Icons.chat, | ||||||
|  |           ), | ||||||
|  |           onPressed: () { | ||||||
|  |             openPrivateConversation(context, widget.userID); | ||||||
|  |           }, | ||||||
|  |         ), | ||||||
|  |         PopupMenuButton<_MenuOptions>( | ||||||
|  |           itemBuilder: (c) => [ | ||||||
|  |                 PopupMenuItem( | ||||||
|  |                   child: Text(tr("Friends")), | ||||||
|  |                   enabled: _userInfo != null, | ||||||
|  |                   value: _MenuOptions.FRIENDS_LIST, | ||||||
|  |                 ) | ||||||
|  |               ], | ||||||
|  |           onSelected: _selectedMenuOption, | ||||||
|  |         ), | ||||||
|  |       ], | ||||||
|     ); |     ); | ||||||
|   } |   } | ||||||
|  |  | ||||||
| @@ -146,4 +171,19 @@ class _UserPageRouteState extends State<UserPageRoute> { | |||||||
|       ), |       ), | ||||||
|     ); |     ); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|  |   /// Method called each time a menu option is selected | ||||||
|  |   void _selectedMenuOption(_MenuOptions value) { | ||||||
|  |     switch (value) { | ||||||
|  |       case _MenuOptions.FRIENDS_LIST: | ||||||
|  |         Navigator.of(context).push( | ||||||
|  |           MaterialPageRoute( | ||||||
|  |             builder: (c) => OtherUserFriendsListRoute( | ||||||
|  |                   user: _userInfo, | ||||||
|  |                 ), | ||||||
|  |           ), | ||||||
|  |         ); | ||||||
|  |         break; | ||||||
|  |     } | ||||||
|  |   } | ||||||
| } | } | ||||||
|   | |||||||
| @@ -14,8 +14,16 @@ Widget buildCenteredProgressBar() { | |||||||
| } | } | ||||||
|  |  | ||||||
| /// Build and return a full loading page | /// Build and return a full loading page | ||||||
| Widget buildLoadingPage() { | Widget buildLoadingPage({ | ||||||
|  |   bool showAppBar = false, | ||||||
|  |   String routeTitle, | ||||||
|  | }) { | ||||||
|   return Scaffold( |   return Scaffold( | ||||||
|  |     appBar: showAppBar | ||||||
|  |         ? AppBar( | ||||||
|  |             title: Text(routeTitle), | ||||||
|  |           ) | ||||||
|  |         : null, | ||||||
|     body: buildCenteredProgressBar(), |     body: buildCenteredProgressBar(), | ||||||
|   ); |   ); | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user