mirror of
https://gitlab.com/comunic/comunicmobile
synced 2024-11-26 06:49: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/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),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user