From 1719b1c8fe887c02ac0508235b6bb7d3f11e9865 Mon Sep 17 00:00:00 2001 From: LittleSheep Date: Mon, 27 Oct 2025 01:57:03 +0800 Subject: [PATCH] :bug: Bug fixes --- .../thought/function_calls_section.dart | 1 - lib/widgets/thought/proposals_section.dart | 2 -- lib/widgets/thought/reasoning_section.dart | 1 - lib/widgets/thought/thought_content.dart | 20 +++++++++----- lib/widgets/thought/thought_shared.dart | 26 +++++++++++-------- lib/widgets/thought/token_info.dart | 1 - 6 files changed, 29 insertions(+), 22 deletions(-) diff --git a/lib/widgets/thought/function_calls_section.dart b/lib/widgets/thought/function_calls_section.dart index a6a228d8..aad4a6ac 100644 --- a/lib/widgets/thought/function_calls_section.dart +++ b/lib/widgets/thought/function_calls_section.dart @@ -46,7 +46,6 @@ class _FunctionCallsSectionState extends State { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - const Gap(12), Container( padding: const EdgeInsets.all(8), decoration: BoxDecoration( diff --git a/lib/widgets/thought/proposals_section.dart b/lib/widgets/thought/proposals_section.dart index 5bfa606b..2dfcaafa 100644 --- a/lib/widgets/thought/proposals_section.dart +++ b/lib/widgets/thought/proposals_section.dart @@ -1,5 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:gap/gap.dart'; import 'package:material_symbols_icons/material_symbols_icons.dart'; class ProposalsSection extends StatelessWidget { @@ -21,7 +20,6 @@ class ProposalsSection extends StatelessWidget { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - const Gap(12), Wrap( spacing: 8, runSpacing: 8, diff --git a/lib/widgets/thought/reasoning_section.dart b/lib/widgets/thought/reasoning_section.dart index 2e16eab3..2a628d9a 100644 --- a/lib/widgets/thought/reasoning_section.dart +++ b/lib/widgets/thought/reasoning_section.dart @@ -17,7 +17,6 @@ class ReasoningSection extends StatelessWidget { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - const Gap(12), Container( padding: const EdgeInsets.all(8), decoration: BoxDecoration( diff --git a/lib/widgets/thought/thought_content.dart b/lib/widgets/thought/thought_content.dart index 3445a886..589a3665 100644 --- a/lib/widgets/thought/thought_content.dart +++ b/lib/widgets/thought/thought_content.dart @@ -24,12 +24,20 @@ class ThoughtContent extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ Expanded( - child: SelectableText( - streamingText, - style: TextStyle( - color: Theme.of(context).colorScheme.onSurface, - height: 1.4, - ), + child: MarkdownTextContent( + isSelectable: true, + content: streamingText, + extraBlockSyntaxList: [ProposalBlockSyntax()], + textStyle: Theme.of(context).textTheme.bodyMedium, + extraGenerators: [ + ProposalGenerator( + backgroundColor: + Theme.of(context).colorScheme.secondaryContainer, + foregroundColor: + Theme.of(context).colorScheme.onSecondaryContainer, + borderColor: Theme.of(context).colorScheme.outline, + ), + ], ), ), const SizedBox(width: 8), diff --git a/lib/widgets/thought/thought_shared.dart b/lib/widgets/thought/thought_shared.dart index 8a54db59..3b58b03d 100644 --- a/lib/widgets/thought/thought_shared.dart +++ b/lib/widgets/thought/thought_shared.dart @@ -13,7 +13,6 @@ import 'package:island/widgets/thought/thought_content.dart'; import 'package:island/widgets/thought/thought_header.dart'; import 'package:island/widgets/thought/token_info.dart'; import 'package:material_symbols_icons/material_symbols_icons.dart'; -import 'package:styled_widget/styled_widget.dart'; List> _extractProposals(String content) { final proposalRegex = RegExp( @@ -237,6 +236,7 @@ class ThoughtItem extends StatelessWidget { ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, + spacing: 8, children: [ // Main content ThoughtContent( @@ -246,14 +246,21 @@ class ThoughtItem extends StatelessWidget { ), // Reasoning chunks (streaming only) - ReasoningSection(reasoningChunks: reasoningChunks), + if (reasoningChunks.isNotEmpty) + ReasoningSection(reasoningChunks: reasoningChunks), // Function calls - FunctionCallsSection( - isStreaming: isStreaming, - streamingFunctionCalls: streamingFunctionCalls, - thought: thought, - ), + if (streamingFunctionCalls.isNotEmpty || + (thought?.chunks.isNotEmpty ?? false) && + thought!.chunks.any( + (chunk) => + chunk.type == ThinkingChunkType.functionCall, + )) + FunctionCallsSection( + isStreaming: isStreaming, + streamingFunctionCalls: streamingFunctionCalls, + thought: thought, + ), // Token count and model name (for completed AI thoughts only) if (!isStreaming && isAI && thought != null) @@ -266,10 +273,7 @@ class ThoughtItem extends StatelessWidget { onProposalAction: _handleProposalAction, ), - if (isStreaming && isAI) - LinearProgressIndicator().padding( - top: streamingText.isNotEmpty ? 8 : 0, - ), + if (isStreaming && isAI) LinearProgressIndicator(), ], ), ), diff --git a/lib/widgets/thought/token_info.dart b/lib/widgets/thought/token_info.dart index a05d4f0c..a4e8f354 100644 --- a/lib/widgets/thought/token_info.dart +++ b/lib/widgets/thought/token_info.dart @@ -17,7 +17,6 @@ class TokenInfo extends StatelessWidget { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - const Gap(8), Row( children: [ if (thought.modelName != null) ...[