From f2d780b48fecf72f1bee5367b328c7c34759978b Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Mon, 1 Sep 2025 21:37:59 +0800 Subject: [PATCH] :lipstick: Optimize of account profile card --- lib/screens/account/relationship.dart | 6 ++- lib/screens/chat/room_detail.dart | 45 ++++++++++++++++++----- lib/widgets/account/account_name.dart | 2 +- lib/widgets/account/account_pfc.dart | 53 +++++++++++++++++---------- 4 files changed, 74 insertions(+), 32 deletions(-) diff --git a/lib/screens/account/relationship.dart b/lib/screens/account/relationship.dart index e9c91393..7dd3ef3b 100644 --- a/lib/screens/account/relationship.dart +++ b/lib/screens/account/relationship.dart @@ -4,6 +4,7 @@ import 'package:flutter/services.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:island/pods/userinfo.dart'; +import 'package:island/widgets/account/account_pfc.dart'; import 'package:island/widgets/account/account_picker.dart'; import 'package:island/widgets/alert.dart'; import 'package:island/widgets/app_scaffold.dart'; @@ -99,7 +100,10 @@ class RelationshipListTile extends StatelessWidget { return ListTile( contentPadding: const EdgeInsets.only(left: 16, right: 12), - leading: ProfilePictureWidget(fileId: account.profile.picture?.id), + leading: AccountPfcGestureDetector( + uname: account.name, + child: ProfilePictureWidget(fileId: account.profile.picture?.id), + ), title: Row( spacing: 6, children: [ diff --git a/lib/screens/chat/room_detail.dart b/lib/screens/chat/room_detail.dart index d5347fa6..2862a5e8 100644 --- a/lib/screens/chat/room_detail.dart +++ b/lib/screens/chat/room_detail.dart @@ -153,7 +153,9 @@ class ChatDetailScreen extends HookConsumerWidget { ), ListTile( title: const Text('chatBreak5m').tr(), - subtitle: const Text('chatBreakHour').tr(args: ['chatBreak5m'.tr()]), + subtitle: const Text( + 'chatBreakHour', + ).tr(args: ['chatBreak5m'.tr()]), leading: const Icon(Symbols.circle), onTap: () { setChatBreak(now.add(const Duration(minutes: 5))); @@ -165,7 +167,9 @@ class ChatDetailScreen extends HookConsumerWidget { ), ListTile( title: const Text('chatBreak10m').tr(), - subtitle: const Text('chatBreakHour').tr(args: ['chatBreak10m'.tr()]), + subtitle: const Text( + 'chatBreakHour', + ).tr(args: ['chatBreak10m'.tr()]), leading: const Icon(Symbols.circle), onTap: () { setChatBreak(now.add(const Duration(minutes: 10))); @@ -177,7 +181,9 @@ class ChatDetailScreen extends HookConsumerWidget { ), ListTile( title: const Text('chatBreak15m').tr(), - subtitle: const Text('chatBreakHour').tr(args: ['chatBreak15m'.tr()]), + subtitle: const Text( + 'chatBreakHour', + ).tr(args: ['chatBreak15m'.tr()]), leading: const Icon(Symbols.timer_3), onTap: () { setChatBreak(now.add(const Duration(minutes: 15))); @@ -189,7 +195,9 @@ class ChatDetailScreen extends HookConsumerWidget { ), ListTile( title: const Text('chatBreak30m').tr(), - subtitle: const Text('chatBreakHour').tr(args: ['chatBreak30m'.tr()]), + subtitle: const Text( + 'chatBreakHour', + ).tr(args: ['chatBreak30m'.tr()]), leading: const Icon(Symbols.timer), onTap: () { setChatBreak(now.add(const Duration(minutes: 30))); @@ -247,7 +255,10 @@ class ChatDetailScreen extends HookConsumerWidget { return AppScaffold( body: roomState.when( loading: () => const Center(child: CircularProgressIndicator()), - error: (error, _) => Center(child: Text('errorGeneric'.tr(args: [error.toString()]))), + error: + (error, _) => Center( + child: Text('errorGeneric'.tr(args: [error.toString()])), + ), data: (currentRoom) => CustomScrollView( slivers: [ @@ -375,12 +386,26 @@ class ChatDetailScreen extends HookConsumerWidget { trailing: const Icon(Symbols.chevron_right), title: const Text('searchMessages').tr(), subtitle: totalMessages.when( - data: (count) => Text('messagesCount'.tr(args: [count.toString()])), - loading: () => const CircularProgressIndicator(), - error: (err, stack) => Text('errorGeneric'.tr(args: [err.toString()])), + data: + (count) => Text( + 'messagesCount'.tr( + args: [count.toString()], + ), + ), + loading: + () => const CircularProgressIndicator(), + error: + (err, stack) => Text( + 'errorGeneric'.tr( + args: [err.toString()], + ), + ), ), onTap: () { - context.pushNamed('searchMessages', pathParameters: {'id': id}); + context.pushNamed( + 'searchMessages', + pathParameters: {'id': id}, + ); }, ), ], @@ -716,7 +741,7 @@ class _ChatMemberListSheet extends HookConsumerWidget { ? 'permissionModerator' : 'permissionMember', ).tr(), - Text('dotSeparator').bold().padding(horizontal: 6), + Text('ยท').bold().padding(horizontal: 6), Expanded(child: Text("@${member.account.name}")), ], ), diff --git a/lib/widgets/account/account_name.dart b/lib/widgets/account/account_name.dart index 1e0c2fff..1b5c9542 100644 --- a/lib/widgets/account/account_name.dart +++ b/lib/widgets/account/account_name.dart @@ -162,7 +162,7 @@ class VerificationStatusCard extends StatelessWidget { size: 32, color: kVerificationMarkColors[mark.type], fill: 1, - ), + ).alignment(Alignment.centerLeft), const Gap(8), Text(mark.title ?? 'No title').bold(), Text(mark.description ?? 'descriptionNone'.tr()), diff --git a/lib/widgets/account/account_pfc.dart b/lib/widgets/account/account_pfc.dart index 4a6cb469..9053033c 100644 --- a/lib/widgets/account/account_pfc.dart +++ b/lib/widgets/account/account_pfc.dart @@ -111,26 +111,39 @@ class AccountProfileCard extends HookConsumerWidget { ], ), if (data.profile.timeZone.isNotEmpty && !kIsWeb) - Row( - spacing: 6, - children: [ - Icon( - Symbols.alarm, - size: 17, - fill: 1, - ).padding(right: 2), - Text( - getTzInfo( - data.profile.timeZone, - ).$2.formatCustomGlobal('HH:mm'), - ).fontSize(12), - Text( - getTzInfo( - data.profile.timeZone, - ).$1.formatOffsetLocal(), - ).fontSize(12), - ], - ).padding(top: 2), + () { + try { + final tzInfo = getTzInfo(data.profile.timeZone); + return Row( + spacing: 6, + children: [ + Icon( + Symbols.alarm, + size: 17, + fill: 1, + ).padding(right: 2), + Text( + tzInfo.$2.formatCustomGlobal('HH:mm'), + ).fontSize(12), + Text( + tzInfo.$1.formatOffsetLocal(), + ).fontSize(12), + ], + ).padding(top: 2); + } catch (e) { + return Row( + spacing: 6, + children: [ + Icon( + Symbols.alarm, + size: 17, + fill: 1, + ).padding(right: 2), + Text('timezoneNotFound'.tr()).fontSize(12), + ], + ).padding(top: 2); + } + }(), if (data.badges.isNotEmpty) BadgeList(badges: data.badges).padding(top: 12), LevelingProgressCard(