2020-05-08 13:40:13 +00:00
|
|
|
import 'package:comunic/helpers/conversations_helper.dart';
|
2020-05-08 13:42:44 +00:00
|
|
|
import 'package:comunic/helpers/events_helper.dart';
|
2020-05-08 13:40:13 +00:00
|
|
|
import 'package:comunic/helpers/users_helper.dart';
|
|
|
|
import 'package:comunic/lists/unread_conversations_list.dart';
|
|
|
|
import 'package:comunic/lists/users_list.dart';
|
2020-05-09 12:56:33 +00:00
|
|
|
import 'package:comunic/ui/routes/main_route/main_route.dart';
|
2020-05-08 13:40:13 +00:00
|
|
|
import 'package:comunic/ui/widgets/account_image_widget.dart';
|
|
|
|
import 'package:comunic/ui/widgets/async_screen_widget.dart';
|
2020-05-08 13:42:44 +00:00
|
|
|
import 'package:comunic/ui/widgets/safe_state.dart';
|
2020-05-08 13:40:13 +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();
|
|
|
|
}
|
|
|
|
|
2020-05-08 13:42:44 +00:00
|
|
|
class _UnreadConversationsScreenState
|
|
|
|
extends SafeState<UnreadConversationsScreen> {
|
2020-05-08 13:40:13 +00:00
|
|
|
UnreadConversationsList _list;
|
|
|
|
UsersList _users;
|
|
|
|
|
2020-05-08 13:42:44 +00:00
|
|
|
final _key = GlobalKey<AsyncScreenWidgetState>();
|
|
|
|
|
2020-05-08 13:40:13 +00:00
|
|
|
Future<void> _refresh() async {
|
|
|
|
_list = await ConversationsHelper.getListUnread();
|
|
|
|
_users = await UsersHelper().getListWithThrow(_list.usersID);
|
|
|
|
}
|
|
|
|
|
2020-05-08 13:42:44 +00:00
|
|
|
@override
|
|
|
|
void initState() {
|
|
|
|
super.initState();
|
|
|
|
|
|
|
|
listen<NewNumberUnreadConversations>((e) => _key.currentState.refresh());
|
|
|
|
}
|
|
|
|
|
2020-05-08 13:40:13 +00:00
|
|
|
@override
|
|
|
|
Widget build(BuildContext context) {
|
|
|
|
return AsyncScreenWidget(
|
2020-05-08 13:42:44 +00:00
|
|
|
key: _key,
|
2020-05-08 13:40:13 +00:00
|
|
|
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)),
|
2020-05-09 12:56:33 +00:00
|
|
|
onTap: () => MainController.of(context).openConversation(conv.id),
|
2020-05-08 13:40:13 +00:00
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|