From df7dd85a0c76fa2af2e87b1df964d6b447a630ec Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Wed, 5 Jun 2024 23:55:21 +0800 Subject: [PATCH] :sparkles: Optimized chat --- lib/screens/channel/channel_chat.dart | 5 +- lib/widgets/chat/chat_message.dart | 2 - lib/widgets/chat/chat_message_input.dart | 125 +++++++++++------------ 3 files changed, 62 insertions(+), 70 deletions(-) diff --git a/lib/screens/channel/channel_chat.dart b/lib/screens/channel/channel_chat.dart index 5391d43..7717163 100644 --- a/lib/screens/channel/channel_chat.dart +++ b/lib/screens/channel/channel_chat.dart @@ -339,7 +339,6 @@ class _ChannelChatScreenState extends State { Expanded( child: PagedListView( reverse: true, - clipBehavior: Clip.none, pagingController: _pagingController, builderDelegate: PagedChildBuilderDelegate( itemBuilder: buildHistory, @@ -351,8 +350,8 @@ class _ChannelChatScreenState extends State { ), Positioned( bottom: math.max(MediaQuery.of(context).padding.bottom, 16), - left: 16, - right: 16, + left: 0, + right: 0, child: ChatMessageInput( edit: _messageToEditing, reply: _messageToReplying, diff --git a/lib/widgets/chat/chat_message.dart b/lib/widgets/chat/chat_message.dart index 3fc87ae..fc61d5b 100644 --- a/lib/widgets/chat/chat_message.dart +++ b/lib/widgets/chat/chat_message.dart @@ -116,8 +116,6 @@ class ChatMessage extends StatelessWidget { item.sender.account.nick, style: const TextStyle(fontWeight: FontWeight.bold), ), - const SizedBox(width: 4), - Text(format(item.createdAt, locale: 'en_short')), Expanded(child: buildContent()), ], ); diff --git a/lib/widgets/chat/chat_message_input.dart b/lib/widgets/chat/chat_message_input.dart index 23156aa..847fc4d 100644 --- a/lib/widgets/chat/chat_message_input.dart +++ b/lib/widgets/chat/chat_message_input.dart @@ -157,8 +157,6 @@ class _ChatMessageInputState extends State { @override Widget build(BuildContext context) { - const borderRadius = BorderRadius.all(Radius.circular(20)); - final notifyBannerActions = [ TextButton( onPressed: resetInput, @@ -167,71 +165,68 @@ class _ChatMessageInputState extends State { ]; return Material( - borderRadius: borderRadius, - elevation: 2, - child: ClipRRect( - borderRadius: borderRadius, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - if (_replyTo != null) - MaterialBanner( - leading: const FaIcon(FontAwesomeIcons.reply, size: 18), - dividerColor: Colors.transparent, - content: ChatMessage( - item: _replyTo!, - isContentPreviewing: true, - ), - actions: notifyBannerActions, + color: Theme.of(context).colorScheme.surface, + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + const Divider(thickness: 0.3, height: 0.3), + if (_replyTo != null) + MaterialBanner( + leading: const FaIcon(FontAwesomeIcons.reply, size: 18), + dividerColor: Colors.transparent, + content: ChatMessage( + item: _replyTo!, + isContentPreviewing: true, ), - if (_editTo != null) - MaterialBanner( - leading: const Icon(Icons.edit), - dividerColor: Colors.transparent, - content: ChatMessage( - item: _editTo!, - isContentPreviewing: true, - ), - actions: notifyBannerActions, - ), - SizedBox( - height: 56, - child: Row( - mainAxisAlignment: MainAxisAlignment.start, - children: [ - Expanded( - child: TextField( - controller: _textController, - focusNode: _focusNode, - maxLines: null, - autocorrect: true, - keyboardType: TextInputType.text, - decoration: InputDecoration.collapsed( - hintText: widget.placeholder ?? - 'messageInputPlaceholder'.trParams( - {'channel': '#${widget.channel.alias}'}, - ), - ), - onSubmitted: (_) => sendMessage(), - onTapOutside: (_) => - FocusManager.instance.primaryFocus?.unfocus(), - ), - ), - IconButton( - icon: const Icon(Icons.attach_file), - color: Colors.teal, - onPressed: () => showAttachments(), - ), - IconButton( - icon: const Icon(Icons.send), - color: Theme.of(context).colorScheme.primary, - onPressed: () => sendMessage(), - ) - ], - ).paddingOnly(left: 16, right: 4), + actions: notifyBannerActions, ), - ], - ), + if (_editTo != null) + MaterialBanner( + leading: const Icon(Icons.edit), + dividerColor: Colors.transparent, + content: ChatMessage( + item: _editTo!, + isContentPreviewing: true, + ), + actions: notifyBannerActions, + ), + SizedBox( + height: 56, + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Expanded( + child: TextField( + controller: _textController, + focusNode: _focusNode, + maxLines: null, + autocorrect: true, + keyboardType: TextInputType.text, + decoration: InputDecoration.collapsed( + hintText: widget.placeholder ?? + 'messageInputPlaceholder'.trParams( + {'channel': '#${widget.channel.alias}'}, + ), + ), + onSubmitted: (_) => sendMessage(), + onTapOutside: (_) => + FocusManager.instance.primaryFocus?.unfocus(), + ), + ), + IconButton( + icon: const Icon(Icons.attach_file), + color: Colors.teal, + onPressed: () => showAttachments(), + ), + IconButton( + icon: const Icon(Icons.send), + color: Theme.of(context).colorScheme.primary, + onPressed: () => sendMessage(), + ) + ], + ).paddingOnly(left: 20, right: 16), + ), + ], ), ); }