diff --git a/lib/screens/chat.dart b/lib/screens/chat.dart index 4aba838..f062da4 100644 --- a/lib/screens/chat.dart +++ b/lib/screens/chat.dart @@ -3,6 +3,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_expandable_fab/flutter_expandable_fab.dart'; import 'package:gap/gap.dart'; import 'package:go_router/go_router.dart'; +import 'package:google_fonts/google_fonts.dart'; import 'package:material_symbols_icons/symbols.dart'; import 'package:provider/provider.dart'; import 'package:responsive_framework/responsive_framework.dart'; @@ -136,6 +137,28 @@ class _ChatScreenState extends State { _fetchWhatsNew(); } + void _onTapChannel(SnChannel channel) { + final doExpand = ResponsiveBreakpoints.of(context).largerOrEqualTo(DESKTOP); + + if (doExpand) { + setState(() => _focusChannel = channel); + return; + } + GoRouter.of(context).pushNamed( + 'chatRoom', + pathParameters: { + 'scope': channel.realm?.alias ?? 'global', + 'alias': channel.alias, + }, + ).then((value) { + if (mounted) { + _unreadCounts?[channel.id] = 0; + setState(() => _unreadCounts?[channel.id] = 0); + _refreshChannels(noRemote: true); + } + }); + } + @override Widget build(BuildContext context) { final ud = context.read(); @@ -285,23 +308,7 @@ class _ChatScreenState extends State { ?.avatar, ), onTap: () { - if (doExpand) { - setState(() => _focusChannel = channel); - return; - } - GoRouter.of(context).pushNamed( - 'chatRoom', - pathParameters: { - 'scope': channel.realm?.alias ?? 'global', - 'alias': channel.alias, - }, - ).then((value) { - if (mounted) { - _unreadCounts?[channel.id] = 0; - setState(() => _unreadCounts?[channel.id] = 0); - _refreshChannels(noRemote: true); - } - }); + _onTapChannel(channel); }, ); } @@ -319,10 +326,43 @@ class _ChatScreenState extends State { ], ), subtitle: lastMessage != null - ? Text( - '${ud.getAccountFromCache(lastMessage.sender.accountId)?.nick}: ${lastMessage.body['text'] ?? 'Unable preview'}', - maxLines: 1, - overflow: TextOverflow.ellipsis, + ? Row( + children: [ + Badge( + label: Text(ud + .getAccountFromCache( + lastMessage.sender.accountId) + ?.nick ?? + 'unknown'.tr()), + backgroundColor: + Theme.of(context).colorScheme.primary, + ), + const Gap(6), + Expanded( + child: Text( + lastMessage.body['text'] ?? + 'Unable preview', + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + ), + Text( + DateFormat( + lastMessage.createdAt.toLocal().day == + DateTime.now().day + ? 'HH:mm' + : lastMessage.createdAt + .toLocal() + .year == + DateTime.now().year + ? 'MM/dd' + : 'yy/MM/dd', + ).format(lastMessage.createdAt.toLocal()), + style: GoogleFonts.robotoMono( + fontSize: 12, + ), + ), + ], ) : Text( channel.description, @@ -332,7 +372,7 @@ class _ChatScreenState extends State { contentPadding: const EdgeInsets.symmetric(horizontal: 16), leading: AccountImage( - content: null, + content: channel.realm?.avatar, fallbackWidget: const Icon(Symbols.chat, size: 20), ), onTap: () { @@ -341,18 +381,7 @@ class _ChatScreenState extends State { setState(() => _focusChannel = channel); return; } - GoRouter.of(context).pushNamed( - 'chatRoom', - pathParameters: { - 'scope': channel.realm?.alias ?? 'global', - 'alias': channel.alias, - }, - ).then((value) { - if (mounted) { - setState(() => _unreadCounts?[channel.id] = 0); - _refreshChannels(noRemote: true); - } - }); + _onTapChannel(channel); }, ); }, diff --git a/lib/screens/home.dart b/lib/screens/home.dart index 9617e7f..8b312de 100644 --- a/lib/screens/home.dart +++ b/lib/screens/home.dart @@ -93,8 +93,12 @@ class _HomeScreenState extends State { : MainAxisAlignment.start, children: [ _HomeDashUpdateWidget( - padding: const EdgeInsets.only( - bottom: 8, left: 8, right: 8)), + padding: const EdgeInsets.only( + bottom: 8, + left: 8, + right: 8, + ), + ), _HomeDashSpecialDayWidget().padding(horizontal: 8), StaggeredGrid.extent( maxCrossAxisExtent: 280, diff --git a/lib/widgets/chat/chat_message.dart b/lib/widgets/chat/chat_message.dart index d0d2f07..58fc431 100644 --- a/lib/widgets/chat/chat_message.dart +++ b/lib/widgets/chat/chat_message.dart @@ -161,7 +161,7 @@ class ChatMessage extends StatelessWidget { if (data.preload?.quoteEvent != null) StyledWidget(Container( constraints: BoxConstraints( - maxWidth: 480, + maxWidth: 360, ), decoration: BoxDecoration( borderRadius: @@ -210,9 +210,8 @@ class ChatMessage extends StatelessWidget { AttachmentList( data: data.preload!.attachments!, bordered: true, - maxHeight: 560, - maxWidth: 480, - minWidth: 480, + maxHeight: 360, + maxWidth: 480 - 48 - padding.left, padding: padding.copyWith(top: 8, left: 48 + padding.left), ), if (!hasMerged && !isCompact) @@ -292,14 +291,11 @@ class _ChatMessageText extends StatelessWidget { buttonItems: items, ); }, - child: Container( - constraints: const BoxConstraints(maxWidth: 480), - child: MarkdownTextContent( - content: data.body['text'], - isAutoWarp: true, - isEnlargeSticker: - RegExp(r"^:([-\w]+):$").hasMatch(data.body['text'] ?? ''), - ), + child: MarkdownTextContent( + content: data.body['text'], + isAutoWarp: true, + isEnlargeSticker: + RegExp(r"^:([-\w]+):$").hasMatch(data.body['text'] ?? ''), ), ), if (data.updatedAt != data.createdAt)