feat(chat): Optimize chat input and message bubble rendering

This commit is contained in:
cogwheel
2025-12-20 18:25:55 +05:30
parent f8d0911b23
commit 622dcf9142
2 changed files with 9 additions and 9 deletions

View File

@@ -1340,9 +1340,7 @@ class _ModernChatInputState extends ConsumerState<ModernChatInput>
// 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<ModernChatInput>
}
// 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(

View File

@@ -498,6 +498,12 @@ class _UserMessageBubbleState extends ConsumerState<UserMessageBubble> {
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<UserMessageBubble> {
),
decoration: BoxDecoration(
color: context.conduitTheme.chatBubbleUser,
borderRadius: BorderRadius.circular(
AppBorderRadius.messageBubble,
),
borderRadius: BorderRadius.circular(bubbleRadius),
),
child: _isEditing
? Focus(