From 4e7181a20f25e452c0c38ea5c259e5ba2edace5b Mon Sep 17 00:00:00 2001 From: Garrett Watson Date: Fri, 10 Nov 2023 18:23:25 -0500 Subject: [PATCH 1/2] feat: match contact status formatting w/ Resonite + anti-alias recon online indicator --- lib/widgets/friends/friend_list_tile.dart | 50 ++++++++++++------- .../friend_online_status_indicator.dart | 12 +++-- 2 files changed, 40 insertions(+), 22 deletions(-) diff --git a/lib/widgets/friends/friend_list_tile.dart b/lib/widgets/friends/friend_list_tile.dart index d10ef14..ab9adab 100644 --- a/lib/widgets/friends/friend_list_tile.dart +++ b/lib/widgets/friends/friend_list_tile.dart @@ -5,13 +5,15 @@ import 'package:recon/auxiliary.dart'; import 'package:recon/clients/messaging_client.dart'; import 'package:recon/models/message.dart'; import 'package:recon/models/users/friend.dart'; +import 'package:recon/models/users/online_status.dart'; import 'package:recon/widgets/formatted_text.dart'; import 'package:recon/widgets/friends/friend_online_status_indicator.dart'; import 'package:recon/widgets/generic_avatar.dart'; import 'package:recon/widgets/messages/messages_list.dart'; class FriendListTile extends StatelessWidget { - const FriendListTile({required this.friend, required this.unreads, this.onTap, super.key}); + const FriendListTile( + {required this.friend, required this.unreads, this.onTap, super.key}); final Friend friend; final int unreads; @@ -24,7 +26,8 @@ class FriendListTile extends StatelessWidget { final mClient = Provider.of(context, listen: false); final currentSession = friend.userStatus.currentSessionIndex == -1 ? null - : friend.userStatus.decodedSessions.elementAtOrNull(friend.userStatus.currentSessionIndex); + : friend.userStatus.decodedSessions + .elementAtOrNull(friend.userStatus.currentSessionIndex); return ListTile( leading: GenericAvatar( imageUri: imageUri, @@ -32,7 +35,8 @@ class FriendListTile extends StatelessWidget { trailing: unreads != 0 ? Text( "+$unreads", - style: theme.textTheme.bodyMedium?.copyWith(color: theme.colorScheme.primary), + style: theme.textTheme.bodyMedium + ?.copyWith(color: theme.colorScheme.primary), ) : null, title: Row( @@ -57,26 +61,36 @@ class FriendListTile extends StatelessWidget { const SizedBox( width: 4, ), - Text(toBeginningOfSentenceCase(friend.userStatus.onlineStatus.name) ?? "Unknown"), - if (currentSession != null && currentSession.isVisible) ...[ - const Text(" in "), - if (currentSession.name.isNotEmpty) - Expanded( - child: FormattedText( - currentSession.formattedName, - overflow: TextOverflow.ellipsis, - maxLines: 1, - ), - ) - else + Text(toBeginningOfSentenceCase(friend.userStatus.onlineStatus.name) ?? + "Unknown"), + if (!(friend.userStatus.onlineStatus == OnlineStatus.offline || + friend.userStatus.onlineStatus == OnlineStatus.invisible)) + if (currentSession != null) ...[ + const Text(" in "), + if (currentSession.name.isNotEmpty) + Expanded( + child: FormattedText( + currentSession.formattedName, + overflow: TextOverflow.ellipsis, + maxLines: 1, + ), + ) + else + Expanded( + child: Text( + "${currentSession.accessLevel.toReadableString()} World", + overflow: TextOverflow.ellipsis, + maxLines: 1, + ), + ) + ] else if (friend.userStatus.appVersion.isNotEmpty) Expanded( child: Text( - "${currentSession.accessLevel.toReadableString()} session", + " on version ${friend.userStatus.appVersion}", overflow: TextOverflow.ellipsis, maxLines: 1, ), - ) - ] + ), ], ), onTap: () async { diff --git a/lib/widgets/friends/friend_online_status_indicator.dart b/lib/widgets/friends/friend_online_status_indicator.dart index 202d722..ad1168c 100644 --- a/lib/widgets/friends/friend_online_status_indicator.dart +++ b/lib/widgets/friends/friend_online_status_indicator.dart @@ -1,6 +1,6 @@ +import 'package:flutter/material.dart'; import 'package:recon/models/users/online_status.dart'; import 'package:recon/models/users/user_status.dart'; -import 'package:flutter/material.dart'; class FriendOnlineStatusIndicator extends StatelessWidget { const FriendOnlineStatusIndicator({required this.userStatus, super.key}); @@ -9,17 +9,21 @@ class FriendOnlineStatusIndicator extends StatelessWidget { @override Widget build(BuildContext context) { - return userStatus.appVersion.contains("ReCon") && userStatus.onlineStatus != OnlineStatus.offline + return userStatus.appVersion.contains("ReCon") && + userStatus.onlineStatus != OnlineStatus.offline ? SizedBox.square( dimension: 10, child: Image.asset( "assets/images/logo-white.png", - alignment: Alignment.center, color: userStatus.onlineStatus.color(context), + filterQuality: FilterQuality.medium, + isAntiAlias: true, ), ) : Icon( - userStatus.onlineStatus == OnlineStatus.offline ? Icons.circle_outlined : Icons.circle, + userStatus.onlineStatus == OnlineStatus.offline + ? Icons.circle_outlined + : Icons.circle, color: userStatus.onlineStatus.color(context), size: 10, ); From 5cd8f5689538483817cbeaf10cad1d29be6c08c6 Mon Sep 17 00:00:00 2001 From: Nutcake Date: Sat, 11 Nov 2023 12:00:01 +0100 Subject: [PATCH 2/2] Fix code formatting --- lib/widgets/friends/friend_list_tile.dart | 12 ++++-------- .../friends/friend_online_status_indicator.dart | 7 ++----- 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/lib/widgets/friends/friend_list_tile.dart b/lib/widgets/friends/friend_list_tile.dart index ab9adab..87a748d 100644 --- a/lib/widgets/friends/friend_list_tile.dart +++ b/lib/widgets/friends/friend_list_tile.dart @@ -12,8 +12,7 @@ import 'package:recon/widgets/generic_avatar.dart'; import 'package:recon/widgets/messages/messages_list.dart'; class FriendListTile extends StatelessWidget { - const FriendListTile( - {required this.friend, required this.unreads, this.onTap, super.key}); + const FriendListTile({required this.friend, required this.unreads, this.onTap, super.key}); final Friend friend; final int unreads; @@ -26,8 +25,7 @@ class FriendListTile extends StatelessWidget { final mClient = Provider.of(context, listen: false); final currentSession = friend.userStatus.currentSessionIndex == -1 ? null - : friend.userStatus.decodedSessions - .elementAtOrNull(friend.userStatus.currentSessionIndex); + : friend.userStatus.decodedSessions.elementAtOrNull(friend.userStatus.currentSessionIndex); return ListTile( leading: GenericAvatar( imageUri: imageUri, @@ -35,8 +33,7 @@ class FriendListTile extends StatelessWidget { trailing: unreads != 0 ? Text( "+$unreads", - style: theme.textTheme.bodyMedium - ?.copyWith(color: theme.colorScheme.primary), + style: theme.textTheme.bodyMedium?.copyWith(color: theme.colorScheme.primary), ) : null, title: Row( @@ -61,8 +58,7 @@ class FriendListTile extends StatelessWidget { const SizedBox( width: 4, ), - Text(toBeginningOfSentenceCase(friend.userStatus.onlineStatus.name) ?? - "Unknown"), + Text(toBeginningOfSentenceCase(friend.userStatus.onlineStatus.name) ?? "Unknown"), if (!(friend.userStatus.onlineStatus == OnlineStatus.offline || friend.userStatus.onlineStatus == OnlineStatus.invisible)) if (currentSession != null) ...[ diff --git a/lib/widgets/friends/friend_online_status_indicator.dart b/lib/widgets/friends/friend_online_status_indicator.dart index ad1168c..405e805 100644 --- a/lib/widgets/friends/friend_online_status_indicator.dart +++ b/lib/widgets/friends/friend_online_status_indicator.dart @@ -9,8 +9,7 @@ class FriendOnlineStatusIndicator extends StatelessWidget { @override Widget build(BuildContext context) { - return userStatus.appVersion.contains("ReCon") && - userStatus.onlineStatus != OnlineStatus.offline + return userStatus.appVersion.contains("ReCon") && userStatus.onlineStatus != OnlineStatus.offline ? SizedBox.square( dimension: 10, child: Image.asset( @@ -21,9 +20,7 @@ class FriendOnlineStatusIndicator extends StatelessWidget { ), ) : Icon( - userStatus.onlineStatus == OnlineStatus.offline - ? Icons.circle_outlined - : Icons.circle, + userStatus.onlineStatus == OnlineStatus.offline ? Icons.circle_outlined : Icons.circle, color: userStatus.onlineStatus.color(context), size: 10, );