resetChatState method
void
resetChatState()
Resets all chat state when the chat is opened This ensures a fresh state each time the chat is opened
Implementation
void resetChatState() {
_hasCompletedFirstInit = false;
PupauEventService.instance.emitPupauEvent(
PupauEvent(
type: UpdateConversationType.resetConversation,
payload: {
"assistantId": assistantId,
"assistantType": assistant.value?.type ?? AssistantType.assistant,
},
),
);
// Reset conversation and messages
conversation.value = null;
messages.clear();
incomingMessages.clear();
isConversationHistoryLoaded = false;
// Reset streaming and loading states
isStreaming.value = false;
assistantsReplying.value = 0;
isLoadingConversation.value = false;
isLoadingTitle.value = false;
hasApiError.value = false;
// Reset input
inputMessageController.clear();
inputMessage.value = "";
// Reset tagged assistants and mentions
clearTaggedAssistants();
mentionValue.value = "";
filteredAssistants.clear();
// Reset conversation starters to avoid showing stale data when switching agents
conversationStarters.clear();
conversationStarters.refresh();
// Reset loading message
resetLoadingMessage();
// Reset tool use states
expandedToolUseMessages.clear();
userToggledToolUseMessages.clear();
hiddenUiToolMessages.clear();
// Reset web search
isWebSearchActive.value = false;
currentWebSearchType.value = null;
externalSearchVisible.value = false;
// Reset conversation pagination
resetConversationPagination();
// Reset scroll
autoScrollEnabled = true;
isAtTop.value = true;
isAtBottom.value = true;
listHeight = 0.0;
// Reset event tracking variables
_currentMessageStartTime = null;
_hasReceivedFirstToken = false;
_isFirstMessage = true;
// Reset other states
selectedImage.value = null;
cachedToolUseImages.clear();
kbReferencesBackup.clear();
toolsFabExpanded.value = false;
forkMessageId.value = "";
forkConversationTitle.value = "";
forkConversationTitleController.clear();
// Reset message notifier
messageNotifier = MessageNotifier();
clearToolArgsPreviewCache();
// Ensure SSE subscriptions are stopped (otherwise the controller can
// keep updating messages even after the UI changes).
stopActiveStreams();
// Clear attachments (conversation-scoped)
if (Get.isRegistered<PupauAttachmentsController>()) {
Get.find<PupauAttachmentsController>().clearAttachments();
}
// Stop TTS if running
ttsService.stopReading();
// Refresh observables
messages.refresh();
update();
}