refactor: ui/ux

This commit is contained in:
cogwheel0
2025-09-05 23:18:24 +05:30
parent ca8b27b2fb
commit 83b80bfeba

View File

@@ -328,6 +328,10 @@ class _AssistantMessageWidgetState extends ConsumerState<AssistantMessageWidget>
Widget _buildSegmentedContent() { Widget _buildSegmentedContent() {
final children = <Widget>[]; final children = <Widget>[];
// Determine if media (attachments or generated images) is rendered above.
final hasMediaAbove =
(widget.message.attachmentIds?.isNotEmpty ?? false) ||
(widget.message.files?.isNotEmpty ?? false);
bool firstToolSpacerAdded = false; bool firstToolSpacerAdded = false;
int idx = 0; int idx = 0;
for (final seg in _segments) { for (final seg in _segments) {
@@ -339,6 +343,11 @@ class _AssistantMessageWidgetState extends ConsumerState<AssistantMessageWidget>
} }
children.add(_buildToolCallTile(seg.toolCall!)); children.add(_buildToolCallTile(seg.toolCall!));
} else if (seg.isReasoning && seg.reasoning != null) { } else if (seg.isReasoning && seg.reasoning != null) {
// If a reasoning tile is the very first content and sits at the top,
// add a small spacer above it for breathing room.
if (children.isEmpty && !hasMediaAbove) {
children.add(const SizedBox(height: Spacing.sm));
}
children.add(_buildReasoningTile(seg.reasoning!, idx)); children.add(_buildReasoningTile(seg.reasoning!, idx));
} else if ((seg.text ?? '').trim().isNotEmpty) { } else if ((seg.text ?? '').trim().isNotEmpty) {
children.add(_buildEnhancedMarkdownContent(seg.text!)); children.add(_buildEnhancedMarkdownContent(seg.text!));
@@ -732,7 +741,7 @@ class _AssistantMessageWidgetState extends ConsumerState<AssistantMessageWidget>
Padding( Padding(
padding: const EdgeInsets.only(left: 4, bottom: 4), padding: const EdgeInsets.only(left: 4, bottom: 4),
child: SizedBox( child: SizedBox(
height: 14, height: 18,
child: _buildTypingDot(), child: _buildTypingDot(),
), ),
), ),
@@ -745,8 +754,8 @@ class _AssistantMessageWidgetState extends ConsumerState<AssistantMessageWidget>
Widget _buildTypingDot() { Widget _buildTypingDot() {
final min = AnimationValues.typingIndicatorScale; final min = AnimationValues.typingIndicatorScale;
return Container( return Container(
width: 10, width: 14,
height: 10, height: 14,
decoration: BoxDecoration( decoration: BoxDecoration(
color: context.conduitTheme.textSecondary.withValues(alpha: 0.6), color: context.conduitTheme.textSecondary.withValues(alpha: 0.6),
shape: BoxShape.circle, shape: BoxShape.circle,