mirror of
				https://gitlab.com/comunic/comunicmobile
				synced 2025-11-03 19:54:12 +00:00 
			
		
		
		
	Display the list of notifications
This commit is contained in:
		@@ -4,8 +4,10 @@ import 'package:comunic/helpers/users_helper.dart';
 | 
				
			|||||||
import 'package:comunic/lists/groups_list.dart';
 | 
					import 'package:comunic/lists/groups_list.dart';
 | 
				
			||||||
import 'package:comunic/lists/notifications_list.dart';
 | 
					import 'package:comunic/lists/notifications_list.dart';
 | 
				
			||||||
import 'package:comunic/lists/users_list.dart';
 | 
					import 'package:comunic/lists/users_list.dart';
 | 
				
			||||||
 | 
					import 'package:comunic/ui/widgets/account_image_widget.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:comunic/models/notification.dart' as n;
 | 
				
			||||||
import 'package:flutter/material.dart';
 | 
					import 'package:flutter/material.dart';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/// Notifications screen
 | 
					/// Notifications screen
 | 
				
			||||||
@@ -70,12 +72,7 @@ class _NotificationsScreenState extends State<NotificationsScreen> {
 | 
				
			|||||||
    return Column(
 | 
					    return Column(
 | 
				
			||||||
      children: [
 | 
					      children: [
 | 
				
			||||||
        Expanded(
 | 
					        Expanded(
 | 
				
			||||||
          child: RefreshIndicator(
 | 
					          child: RefreshIndicator(child: _buildBody(), onRefresh: _loadList),
 | 
				
			||||||
              child: SingleChildScrollView(
 | 
					 | 
				
			||||||
                physics: AlwaysScrollableScrollPhysics(),
 | 
					 | 
				
			||||||
                child: _buildBody(),
 | 
					 | 
				
			||||||
              ),
 | 
					 | 
				
			||||||
              onRefresh: _loadList),
 | 
					 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
      ],
 | 
					      ],
 | 
				
			||||||
    );
 | 
					    );
 | 
				
			||||||
@@ -83,6 +80,24 @@ class _NotificationsScreenState extends State<NotificationsScreen> {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  /// Build body
 | 
					  /// Build body
 | 
				
			||||||
  Widget _buildBody() {
 | 
					  Widget _buildBody() {
 | 
				
			||||||
 | 
					    if (_status == _Status.ERROR || _list.length == 0)
 | 
				
			||||||
 | 
					      return SingleChildScrollView(
 | 
				
			||||||
 | 
					        physics: AlwaysScrollableScrollPhysics(),
 | 
				
			||||||
 | 
					        child: _buildSingleChildCases(),
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return ListView(
 | 
				
			||||||
 | 
					      children: _list
 | 
				
			||||||
 | 
					          .map((f) => _NotificationTile(
 | 
				
			||||||
 | 
					                notification: f,
 | 
				
			||||||
 | 
					                usersList: _users,
 | 
				
			||||||
 | 
					                groupsList: _groups,
 | 
				
			||||||
 | 
					              ))
 | 
				
			||||||
 | 
					          .toList(),
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Widget _buildSingleChildCases() {
 | 
				
			||||||
    // In case of error
 | 
					    // In case of error
 | 
				
			||||||
    if (_status == _Status.ERROR)
 | 
					    if (_status == _Status.ERROR)
 | 
				
			||||||
      return buildErrorCard(tr("Could not get the list of notifications!"),
 | 
					      return buildErrorCard(tr("Could not get the list of notifications!"),
 | 
				
			||||||
@@ -103,3 +118,113 @@ class _NotificationsScreenState extends State<NotificationsScreen> {
 | 
				
			|||||||
      );
 | 
					      );
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class _NotificationTile extends StatelessWidget {
 | 
				
			||||||
 | 
					  final n.Notification notification;
 | 
				
			||||||
 | 
					  final UsersList usersList;
 | 
				
			||||||
 | 
					  final GroupsList groupsList;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const _NotificationTile({
 | 
				
			||||||
 | 
					    Key key,
 | 
				
			||||||
 | 
					    @required this.notification,
 | 
				
			||||||
 | 
					    @required this.usersList,
 | 
				
			||||||
 | 
					    @required this.groupsList,
 | 
				
			||||||
 | 
					  })  : assert(notification != null),
 | 
				
			||||||
 | 
					        super(key: key);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  @override
 | 
				
			||||||
 | 
					  Widget build(BuildContext context) {
 | 
				
			||||||
 | 
					    final srcUser = usersList.getUser(notification.fromUser);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    String message = "${srcUser.fullName} ";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    switch (notification.type) {
 | 
				
			||||||
 | 
					      // Comment
 | 
				
			||||||
 | 
					      case n.NotificationType.COMMENT_CREATED:
 | 
				
			||||||
 | 
					        message += tr("posted a comment");
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      // Friendship requests
 | 
				
			||||||
 | 
					      case n.NotificationType.SENT_FRIEND_REQUEST:
 | 
				
			||||||
 | 
					        message += tr("sent you a friendship request.");
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      case n.NotificationType.ACCEPTED_FRIEND_REQUEST:
 | 
				
			||||||
 | 
					        message += tr("accepted your friendship request.");
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      case n.NotificationType.REJECTED_FRIEND_REQUEST:
 | 
				
			||||||
 | 
					        message += tr("rejected your friendship request.");
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      // Groups membership
 | 
				
			||||||
 | 
					      case n.NotificationType.SENT_GROUP_MEMBERSHIP_INVITATION:
 | 
				
			||||||
 | 
					        message += tr("invited you to join the group");
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      case n.NotificationType.ACCEPTED_GROUP_MEMBERSHIP_INVITATION:
 | 
				
			||||||
 | 
					        message += tr("accepted his invitation to join the group");
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      case n.NotificationType.REJECTED_GROUP_MEMBERSHIP_INVITATION:
 | 
				
			||||||
 | 
					        message += tr("rejected his invitation to join the group");
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      case n.NotificationType.SENT_GROUP_MEMBERSHIP_REQUEST:
 | 
				
			||||||
 | 
					        message += tr("sent a request to join the group");
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      case n.NotificationType.ACCEPTED_GROUP_MEMBERSHIP_REQUEST:
 | 
				
			||||||
 | 
					        message += tr("accepted you request to join the group");
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      case n.NotificationType.REJECTED_GROUP_MEMBERSHIP_REQUEST:
 | 
				
			||||||
 | 
					        message += tr("rejected your request to join the group");
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      // Generic element creation
 | 
				
			||||||
 | 
					      case n.NotificationType.ELEM_CREATED:
 | 
				
			||||||
 | 
					        if (notification.onElemType == n.NotificationElementType.POST)
 | 
				
			||||||
 | 
					          message += tr("created a new post");
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      case n.NotificationType.ELEM_UPDATED:
 | 
				
			||||||
 | 
					        // Operation not implemented
 | 
				
			||||||
 | 
					        break;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Separator
 | 
				
			||||||
 | 
					    message += " ";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Notification target
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // User page
 | 
				
			||||||
 | 
					    if (notification.fromContainerType == n.NotificationElementType.USER_PAGE) {
 | 
				
			||||||
 | 
					      if (notification.fromUser == notification.fromContainerId)
 | 
				
			||||||
 | 
					        message += tr("on his / her page");
 | 
				
			||||||
 | 
					      else
 | 
				
			||||||
 | 
					        message += tr("on %user_name%'s page", args: {
 | 
				
			||||||
 | 
					          "user_name": usersList.getUser(notification.fromContainerId).fullName
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Group page
 | 
				
			||||||
 | 
					    if (notification.fromContainerType ==
 | 
				
			||||||
 | 
					        n.NotificationElementType.GROUP_PAGE) {
 | 
				
			||||||
 | 
					      message += tr("on the group %group%.", args: {
 | 
				
			||||||
 | 
					        "group": groupsList[notification.fromContainerId].displayName
 | 
				
			||||||
 | 
					      });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // Group membership
 | 
				
			||||||
 | 
					    if (notification.onElemType == n.NotificationElementType.GROUP_MEMBERSHIP)
 | 
				
			||||||
 | 
					      message += groupsList[notification.onElemId].displayName;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return ListTile(
 | 
				
			||||||
 | 
					      leading: AccountImageWidget(
 | 
				
			||||||
 | 
					        user: srcUser,
 | 
				
			||||||
 | 
					      ),
 | 
				
			||||||
 | 
					      title: Text(message),
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user