Merge pull request #235 from cogwheel0/conversation-delta-ref-support

conversation-delta-ref-support
This commit is contained in:
cogwheel
2025-12-06 23:10:15 +08:00
committed by GitHub
2 changed files with 18 additions and 3 deletions

View File

@@ -69,6 +69,14 @@ class ConversationDeltaListener {
);
return;
}
if (ref is WidgetRef) {
_subscription = ref.listenManual(
conversationDeltaStreamProvider(_request),
handleNext,
fireImmediately: false,
);
return;
}
if (ref is ProviderContainer) {
_subscription = ref.listen(
conversationDeltaStreamProvider(_request),
@@ -102,6 +110,9 @@ class ConversationDeltaListener {
if (ref is Ref) {
return ref.mounted;
}
// For WidgetRef and ProviderContainer, rely on explicit disposal.
// Callers using WidgetRef must ensure dispose() is called when the
// widget unmounts.
return !_disposed;
}
}

View File

@@ -1878,12 +1878,16 @@ Future<void> _sendMessageInternal(
// Adding a small delay to prevent rapid invalidations that could cause duplicates
Future.delayed(const Duration(milliseconds: 100), () {
try {
// Guard against using ref after widget disposal
if (ref.mounted == true) {
// Guard against using ref after provider disposal
// Only Ref has .mounted; WidgetRef/ProviderContainer don't support
// this check, so we proceed and let the underlying read operations
// handle any disposal gracefully.
final isMounted = ref is Ref ? ref.mounted : true;
if (isMounted) {
refreshConversationsCache(ref);
}
} catch (_) {
// If ref doesn't support mounted or is disposed, skip
// If ref is disposed or invalid, skip
}
});
} catch (e) {