From 622dcf9142a52d2d7ff48b5f66598b50b56316a6 Mon Sep 17 00:00:00 2001 From: cogwheel <172976095+cogwheel0@users.noreply.github.com> Date: Sat, 20 Dec 2025 18:25:55 +0530 Subject: [PATCH] feat(chat): Optimize chat input and message bubble rendering --- lib/features/chat/widgets/modern_chat_input.dart | 8 ++------ lib/features/chat/widgets/user_message_bubble.dart | 10 +++++++--- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/lib/features/chat/widgets/modern_chat_input.dart b/lib/features/chat/widgets/modern_chat_input.dart index f2d2471..5dee4c3 100644 --- a/lib/features/chat/widgets/modern_chat_input.dart +++ b/lib/features/chat/widgets/modern_chat_input.dart @@ -1340,9 +1340,7 @@ class _ModernChatInputState extends ConsumerState // For compact mode, render text field shell with floating buttons on sides if (showCompactComposer) { // Build the text field shell - Widget textFieldShell = AnimatedContainer( - duration: const Duration(milliseconds: 180), - curve: Curves.easeOutCubic, + Widget textFieldShell = Container( padding: const EdgeInsets.symmetric(horizontal: Spacing.md), constraints: const BoxConstraints(minHeight: TouchTarget.input), decoration: shellDecoration, @@ -1404,9 +1402,7 @@ class _ModernChatInputState extends ConsumerState } // For expanded mode with quick pills, use the full shell - Widget shell = AnimatedContainer( - duration: const Duration(milliseconds: 180), - curve: Curves.easeOutCubic, + Widget shell = Container( decoration: shellDecoration, child: ConstrainedBox( constraints: BoxConstraints( diff --git a/lib/features/chat/widgets/user_message_bubble.dart b/lib/features/chat/widgets/user_message_bubble.dart index 126196d..01aa0b8 100644 --- a/lib/features/chat/widgets/user_message_bubble.dart +++ b/lib/features/chat/widgets/user_message_bubble.dart @@ -498,6 +498,12 @@ class _UserMessageBubbleState extends ConsumerState { final inlineEditFill = context.conduitTheme.surfaceContainer.withValues( alpha: 0.92, ); + // Use rounded rectangle for multiline, pill for single-line (like chat input) + // Consider multiline if text exceeds ~50 chars or contains newlines + // Check length first (O(1)) to short-circuit before scanning for newlines + final content = widget.message.content; + final isMultiline = content.length > 50 || content.contains('\n'); + final bubbleRadius = isMultiline ? AppBorderRadius.xl : AppBorderRadius.pill; return GestureDetector( onLongPress: () => _showMessageMenu(context), @@ -539,9 +545,7 @@ class _UserMessageBubbleState extends ConsumerState { ), decoration: BoxDecoration( color: context.conduitTheme.chatBubbleUser, - borderRadius: BorderRadius.circular( - AppBorderRadius.messageBubble, - ), + borderRadius: BorderRadius.circular(bubbleRadius), ), child: _isEditing ? Focus(