mirror of
				https://gitlab.com/comunic/comunicmobile
				synced 2025-11-04 04:04:18 +00:00 
			
		
		
		
	Can get the list of friends of a user
This commit is contained in:
		
							
								
								
									
										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/users_helper.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/posts_list_widget.dart';
 | 
			
		||||
import 'package:comunic/utils/conversations_utils.dart';
 | 
			
		||||
import 'package:comunic/utils/intl_utils.dart';
 | 
			
		||||
import 'package:comunic/utils/ui_utils.dart';
 | 
			
		||||
import 'package:flutter/material.dart';
 | 
			
		||||
@@ -13,6 +15,8 @@ import 'package:flutter/material.dart';
 | 
			
		||||
 | 
			
		||||
enum _PageStatus { LOADING, ERROR, READY }
 | 
			
		||||
 | 
			
		||||
enum _MenuOptions { FRIENDS_LIST }
 | 
			
		||||
 | 
			
		||||
class UserPageRoute extends StatefulWidget {
 | 
			
		||||
  final int userID;
 | 
			
		||||
 | 
			
		||||
@@ -105,6 +109,7 @@ class _UserPageRouteState extends State<UserPageRoute> {
 | 
			
		||||
            NetworkImageWidget(
 | 
			
		||||
              url: _userInfo.accountImageURL,
 | 
			
		||||
              height: _appBarHeight,
 | 
			
		||||
              roundedEdges: false,
 | 
			
		||||
            ),
 | 
			
		||||
            // This gradient ensures that the toolbar icons are distinct
 | 
			
		||||
            // 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;
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user