1
0
mirror of https://gitlab.com/comunic/comunicmobile synced 2024-11-29 08:16:28 +00:00
comunicmobile/lib/ui/screens/unread_conversations_screen.dart

120 lines
3.6 KiB
Dart
Raw Normal View History

import 'package:comunic/helpers/conversations_helper.dart';
import 'package:comunic/helpers/events_helper.dart';
2021-04-25 14:12:36 +00:00
import 'package:comunic/helpers/groups_helper.dart';
import 'package:comunic/helpers/users_helper.dart';
2021-04-25 14:12:36 +00:00
import 'package:comunic/lists/groups_list.dart';
import 'package:comunic/lists/unread_conversations_list.dart';
import 'package:comunic/lists/users_list.dart';
import 'package:comunic/models/unread_conversation.dart';
2021-03-11 17:50:36 +00:00
import 'package:comunic/ui/routes/main_route/main_route.dart';
import 'package:comunic/ui/widgets/async_screen_widget.dart';
2021-03-11 17:50:36 +00:00
import 'package:comunic/ui/widgets/conversation_image_widget.dart';
import 'package:comunic/ui/widgets/safe_state.dart';
2021-03-11 17:50:36 +00:00
import 'package:comunic/utils/date_utils.dart';
import 'package:comunic/utils/intl_utils.dart';
import 'package:flutter/material.dart';
/// Unread conversations screen
///
/// @author Pierre Hubert
class UnreadConversationsScreen extends StatefulWidget {
@override
_UnreadConversationsScreenState createState() =>
_UnreadConversationsScreenState();
}
class _UnreadConversationsScreenState
extends SafeState<UnreadConversationsScreen> {
late UnreadConversationsList _list;
UsersList? _users;
GroupsList? _groups;
final _key = GlobalKey<AsyncScreenWidgetState>();
Future<void> _refresh() async {
_list = await ConversationsHelper.getListUnread();
_users = await UsersHelper().getListWithThrow(_list.usersID);
2021-04-25 14:12:36 +00:00
_groups = await GroupsHelper().getList(_list.groupsID);
}
@override
void initState() {
super.initState();
listen<NewNumberUnreadConversations>((e) => _key.currentState!.refresh());
}
@override
Widget build(BuildContext context) {
return AsyncScreenWidget(
key: _key,
onReload: _refresh,
onBuild: _buildList,
errorMessage: tr("Could not load the list of unread conversations!")!,
);
}
Widget _buildList() {
// Check for no unread conversation
if (_list.isEmpty)
return Center(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
tr("You do not have any unread conversation yet...")!,
textAlign: TextAlign.center,
),
),
);
return ListView.builder(
itemBuilder: _tileBuilder,
itemCount: _list.length,
);
}
Widget _tileBuilder(BuildContext context, int index) {
final UnreadConversation conv = _list[index];
2021-03-11 17:50:36 +00:00
final message = _list[index].message;
final singleUserConv = conv.conv.members!.length < 3;
2021-03-11 17:50:36 +00:00
String? messageStr;
2021-03-11 17:50:36 +00:00
if (message.hasFile)
messageStr = tr("New file");
else if (message.hasMessage)
messageStr = singleUserConv
? message.message.content
: tr("%1% : %2%", args: {
"1": _users!.getUser(message.userID).fullName,
2021-03-11 17:50:36 +00:00
"2": message.message.content,
});
else
message.serverMessage!.getText(_users);
2021-03-11 17:50:36 +00:00
return ListTile(
2021-03-11 17:50:36 +00:00
leading: ConversationImageWidget(
conversation: conv.conv,
users: _users!,
2021-04-25 14:12:36 +00:00
group: conv.conv.isGroupConversation
? _groups!.getGroup(conv.conv.groupID)
2021-04-25 14:12:36 +00:00
: null,
2021-03-11 17:50:36 +00:00
),
2022-03-11 15:21:35 +00:00
title: Text(ConversationsHelper.getConversationName(conv.conv, _users)),
subtitle: RichText(
2021-02-07 16:09:08 +00:00
text: TextSpan(style: Theme.of(context).textTheme.bodyText2, children: [
TextSpan(
2021-03-11 17:50:36 +00:00
text: messageStr,
style: TextStyle(fontStyle: FontStyle.italic),
),
]),
2021-03-11 17:50:36 +00:00
),
trailing: Text(diffTimeFromNowToStr(conv.message.timeSent!)!),
2021-04-25 14:12:36 +00:00
onTap: () =>
MainController.of(context)!.openConversationById(conv.conv.id!),
2021-03-11 17:50:36 +00:00
);
}
}