-
Notifications
You must be signed in to change notification settings - Fork 80
Description
Description
_LlmChatViewState.dispose() does not cancel _pendingPromptResponse, causing a Null check operator used on a null value crash when the user navigates away from the chat while the AI is still streaming a response.
Steps to Reproduce
- Open a chat with an LLM using
LlmChatView - Send a message that triggers a streaming response
- Navigate away (pop the page) before the response finishes streaming
Error
_TypeError: Null check operator used on a null value
Stack trace:
State.setState (package:flutter/src/widgets/framework.dart:1219)
_LlmChatViewState._onSendMessage.<fn> (package:flutter_ai_toolkit/src/views/llm_chat_view/llm_chat_view.dart:257)
FirebaseProvider._sendMessageStream (package:flutter_ai_toolkit/src/providers/implementations/firebase_provider.dart)
Root Cause
In llm_chat_view.dart, the _onSendMessage method creates an LlmResponse with an onUpdate callback that calls setState:
// line 253-258
_pendingPromptResponse = LlmResponse(
stream: sendMessageStream(prompt, attachments: attachments),
onUpdate: (_) => setState(() {}),
onDone: _onPromptDone,
);But dispose() (line 174) does not cancel this response:
@override
void dispose() {
super.dispose();
widget.viewModel.provider.removeListener(_onHistoryChanged);
}When the widget is disposed while streaming is active, the LlmResponse subscription continues to receive data and calls setState on the disposed state, crashing at _element! inside State.setState.
Suggested Fix
Cancel the pending response in dispose():
@override
void dispose() {
_pendingPromptResponse?.cancel();
super.dispose();
widget.viewModel.provider.removeListener(_onHistoryChanged);
}The cancel() method already exists on LlmResponse and is used by _onCancelMessage() — it just needs to also be called during disposal.
Impact
- 588 occurrences across 124 users in our production app (CraftNote)
- Affects any app using
LlmChatViewwhere users can navigate away during streaming - Package version:
flutter_ai_toolkit 1.0.0
Environment
- Flutter AI Toolkit: 1.0.0
- Flutter: 3.27+
- Platform: iOS (but likely affects all platforms)