From 7a8c22c3769269f1a9ed1d9b77c67c782995efbe Mon Sep 17 00:00:00 2001 From: Christian Pauly Date: Wed, 6 May 2020 17:45:59 +0200 Subject: [PATCH] Fix presence list --- .../list_items/presence_list_item.dart | 29 ++++++++++++++----- lib/utils/client_presence_extension.dart | 2 -- lib/utils/presence_extension.dart | 2 +- 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/lib/components/list_items/presence_list_item.dart b/lib/components/list_items/presence_list_item.dart index d36dcf2..44e888b 100644 --- a/lib/components/list_items/presence_list_item.dart +++ b/lib/components/list_items/presence_list_item.dart @@ -1,7 +1,6 @@ import 'package:famedlysdk/famedlysdk.dart'; import 'package:fluffychat/i18n/i18n.dart'; import 'package:fluffychat/utils/app_route.dart'; -import 'package:fluffychat/utils/date_time_extension.dart'; import 'package:fluffychat/views/chat.dart'; import 'package:flutter/material.dart'; @@ -14,10 +13,20 @@ class PresenceListItem extends StatelessWidget { const PresenceListItem(this.presence); + Future _requestProfile(BuildContext context) async { + if (presence.avatarUrl != null) { + return Profile.fromJson({ + 'avatar_url': presence.avatarUrl.toString(), + 'displayname': presence.displayname ?? presence.sender.localpart, + }); + } + return Matrix.of(context).client.getProfileFromUserId(presence.sender); + } + @override Widget build(BuildContext context) { return FutureBuilder( - future: Matrix.of(context).client.getProfileFromUserId(presence.sender), + future: _requestProfile(context), builder: (context, snapshot) { Uri avatarUrl; String displayname = presence.sender.localpart; @@ -39,11 +48,17 @@ class PresenceListItem extends StatelessWidget { mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text(presence.getLocalizedStatusMessage(context)), - Text( - presence.time.localizedTime(context), - style: TextStyle(fontSize: 12), - ), + if (presence.isStatus) + Text(presence.getLocalizedStatusMessage(context)), + if (presence.presence != null) + Text( + presence.presence.toString().split('.').last, + style: TextStyle( + color: presence.currentlyActive == true + ? Colors.green + : Theme.of(context).primaryColor, + ), + ) ], ), actions: [ diff --git a/lib/utils/client_presence_extension.dart b/lib/utils/client_presence_extension.dart index d02cc30..22cae66 100644 --- a/lib/utils/client_presence_extension.dart +++ b/lib/utils/client_presence_extension.dart @@ -1,10 +1,8 @@ import 'package:famedlysdk/famedlysdk.dart'; -import 'presence_extension.dart'; extension ClientPresenceExtension on Client { List get statusList { final statusList = presences.values.toList(); - statusList.removeWhere((Presence p) => !p.isStatus); statusList.sort((a, b) => b.time.compareTo(a.time)); return statusList; } diff --git a/lib/utils/presence_extension.dart b/lib/utils/presence_extension.dart index 853db87..f22290c 100644 --- a/lib/utils/presence_extension.dart +++ b/lib/utils/presence_extension.dart @@ -7,7 +7,7 @@ extension PresenceExtension on Presence { (statusMsg?.isNotEmpty ?? false) || this.displayname != null; String getLocalizedStatusMessage(BuildContext context) { - if (!isStatus) return null; + if (!isStatus) return ''; if (statusMsg?.isNotEmpty ?? false) { return statusMsg; }