1
0
mirror of https://gitlab.com/comunic/comunicmobile synced 2024-12-26 12:58:51 +00:00
comunicmobile/lib/ui/screens/unread_conversations_screen.dart

92 lines
2.7 KiB
Dart

import 'package:comunic/helpers/conversations_helper.dart';
import 'package:comunic/helpers/events_helper.dart';
import 'package:comunic/helpers/users_helper.dart';
import 'package:comunic/lists/unread_conversations_list.dart';
import 'package:comunic/lists/users_list.dart';
import 'package:comunic/ui/routes/main_route/main_route.dart';
import 'package:comunic/ui/widgets/account_image_widget.dart';
import 'package:comunic/ui/widgets/async_screen_widget.dart';
import 'package:comunic/ui/widgets/safe_state.dart';
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> {
UnreadConversationsList _list;
UsersList _users;
final _key = GlobalKey<AsyncScreenWidgetState>();
Future<void> _refresh() async {
_list = await ConversationsHelper.getListUnread();
_users = await UsersHelper().getListWithThrow(_list.usersID);
}
@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 conv = _list[index];
final user = _users.getUser(conv.userID);
return ListTile(
leading: AccountImageWidget(user: user),
title: Text(user.displayName),
subtitle: RichText(
text: TextSpan(style: Theme.of(context).textTheme.body1, children: [
TextSpan(text: conv.convName.isNotEmpty ? conv.convName + "\n" : ""),
TextSpan(
text: conv.message,
style: TextStyle(fontStyle: FontStyle.italic),
),
]),
),
trailing: Text(diffTimeFromNowToStr(conv.lastActive)),
onTap: () => MainController.of(context).openConversation(conv.id),
);
}
}