mirror of
https://gitlab.com/comunic/comunicmobile
synced 2024-11-25 22:39:22 +00:00
Display the list of notifications
This commit is contained in:
parent
910b8188ae
commit
3e15064e44
@ -4,8 +4,10 @@ import 'package:comunic/helpers/users_helper.dart';
|
||||
import 'package:comunic/lists/groups_list.dart';
|
||||
import 'package:comunic/lists/notifications_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/ui_utils.dart';
|
||||
import 'package:comunic/models/notification.dart' as n;
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
/// Notifications screen
|
||||
@ -70,12 +72,7 @@ class _NotificationsScreenState extends State<NotificationsScreen> {
|
||||
return Column(
|
||||
children: [
|
||||
Expanded(
|
||||
child: RefreshIndicator(
|
||||
child: SingleChildScrollView(
|
||||
physics: AlwaysScrollableScrollPhysics(),
|
||||
child: _buildBody(),
|
||||
),
|
||||
onRefresh: _loadList),
|
||||
child: RefreshIndicator(child: _buildBody(), onRefresh: _loadList),
|
||||
)
|
||||
],
|
||||
);
|
||||
@ -83,6 +80,24 @@ class _NotificationsScreenState extends State<NotificationsScreen> {
|
||||
|
||||
/// Build body
|
||||
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
|
||||
if (_status == _Status.ERROR)
|
||||
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),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user