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 { UnreadConversationsList _list; UsersList _users; final _key = GlobalKey(); Future _refresh() async { _list = await ConversationsHelper.getListUnread(); _users = await UsersHelper().getListWithThrow(_list.usersID); } @override void initState() { super.initState(); listen((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), ); } }