onTypingIndicator static method
Returns a stream of TypingIndicator events for real-time typing status.
Old SDK (v4 - Platform Channels):
Used EventChannel('cometchat_typing_stream') and returned Stream<String>.
However, the typingStreamSink was never actually used to emit data on the
native side. Typing events were instead emitted through the shared
EventChannel('cometchat_message_stream') via messageStreamSink, serialized
as a HashMap<String, Any?> with keys:
receiverId(String) — ID of the receiver (user UID or group GUID)receiverType(String) — "user" or "group"metadata(Map?) — additional metadata from the native TypingIndicatorsender(Map) — serialized User or Group map of the typing usermethodName(String) — "onTypingStarted" or "onTypingEnded" On the Dart side,initializetestmessageStream()parsed these maps viaTypingIndicator.fromMap(e)and dispatched toMessageListenercallbacks.
New SDK (Native Dart):
Returns Stream<TypingIndicator> from RealtimeRepository.typingStream.
Each event is a TypingIndicator object with fields:
- TypingIndicator.sender (User) — the user who is typing
- TypingIndicator.receiverId (String) — receiver UID or group GUID
- TypingIndicator.receiverType (String) — "user" or "group"
- TypingIndicator.metadata (Map<String, dynamic>?) — optional metadata
- TypingIndicator.lastTimestamp (DateTime?) — when the event occurred
- TypingIndicator.typingStatus (String?) — "started" or "ended"
No platform channels involved — WebSocket is managed in pure Dart.
Typing events are also dispatched to
MessageListener.onTypingStarted()/onTypingEnded()via_setupNativeStreamSubscriptions()duringinit().
Migration:
- Return type changed from
Stream<String>toStream<TypingIndicator>. - No need to check
methodName— use TypingIndicator.typingStatus instead ("started" or "ended"), or useTypingStatusHelper.isTypingStarted(). - No
EventChanneldependency — works on all platforms including web. MessageListenercallbacks continue to work unchanged.
Implementation
static Stream<TypingIndicator> onTypingIndicator() {
final sdk = SdkRegistry.getInstance();
return sdk.realtime.typingStream;
}