resetChatState method
Resets all chat state when the chat is opened This ensures a fresh state each time the chat is opened
Implementation
void resetChatState({bool isManualReset = false}) {
_hasCompletedFirstInit = false;
if (isManualReset) {
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 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();
// Stop TTS if running
ttsService.stopReading();
// Refresh observables
messages.refresh();
update();
}