From 4f5762c5a9e2b2886de82ca5d323f241c6bbdcd6 Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Thu, 27 Jun 2024 11:04:06 +0800 Subject: [PATCH] :sparkles: User last seen --- lib/translations.dart | 2 ++ lib/widgets/account/account_heading.dart | 16 +++++++++++++--- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/lib/translations.dart b/lib/translations.dart index 913cc72..31dc4b3 100644 --- a/lib/translations.dart +++ b/lib/translations.dart @@ -225,6 +225,7 @@ class SolianMessages extends Translations { 'accountStatusInvisible': 'Invisible', 'accountStatusInvisibleDesc': 'Will show as offline, but all features still remain normal', 'accountStatusOffline': 'Offline', + 'accountLastSeenAt': 'Last seen at @date ago', }, 'zh_CN': { 'hide': '隐藏', @@ -433,6 +434,7 @@ class SolianMessages extends Translations { 'accountStatusInvisible': '隐身', 'accountStatusInvisibleDesc': '将会在他人界面显示离线,但不影响功能使用', 'accountStatusOffline': '离线', + 'accountLastSeenAt': '最后上线于 @date 前', } }; } diff --git a/lib/widgets/account/account_heading.dart b/lib/widgets/account/account_heading.dart index 509dc04..69bef5a 100644 --- a/lib/widgets/account/account_heading.dart +++ b/lib/widgets/account/account_heading.dart @@ -7,6 +7,7 @@ import 'package:solian/providers/account_status.dart'; import 'package:solian/widgets/account/account_avatar.dart'; import 'package:solian/widgets/account/account_badge.dart'; import 'package:solian/widgets/account/account_status_action.dart'; +import 'package:timeago/timeago.dart'; class AccountHeadingWidget extends StatelessWidget { final dynamic avatar; @@ -39,7 +40,7 @@ class AccountHeadingWidget extends StatelessWidget { context: context, builder: (context) => AccountStatusAction(hasStatus: hasStatus), ).then((val) { - if(val == true) onEditStatus!(); + if (val == true) onEditStatus!(); }); } @@ -106,15 +107,24 @@ class AccountHeadingWidget extends StatelessWidget { return Text('loading'.tr); } - final info = StatusProvider.determineStatus( - AccountStatus.fromJson(snapshot.data!.body), + final status = AccountStatus.fromJson( + snapshot.data!.body, ); + final info = StatusProvider.determineStatus(status); return GestureDetector( child: Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ Text(info.$2), + if (!status.isOnline && status.lastSeenAt != null) + Opacity( + opacity: 0.75, + child: Text('accountLastSeenAt'.trParams({ + 'date': format(status.lastSeenAt!.toLocal(), + locale: 'en_short') + })).paddingOnly(left: 4), + ), info.$1.paddingSymmetric(horizontal: 6), ], ),