mongo_realtime 3.0.4
mongo_realtime: ^3.0.4 copied to clipboard
A Dart package that allows you to listen in real-time to changes in a MongoDB database
Changelog #
3.0.4 #
- Added public
disconnect()support to close the websocket without disposing the client instance. - Added public
isConnectedgetter to inspect the current websocket state. - Added connection lifecycle callbacks with
onConnectedandonDisconnected. - Added
autoReconnectConfigto make automatic reconnection behavior explicit for unexpected connection losses. - Added reconnect configuration through
RealtimeReconnectConfig, including support for disabling auto-reconnect, customizing delay, and limiting retry attempts. - Added support for overriding the collection
idFielddirectly incollection(...).doc(id, idField: ...)for one-off document operations and watchers. - Prevented implicit reconnection after a manual
disconnect(). The socket now stays closed untilreconnect()is called explicitly. - Improved fetch handling after manual disconnect so failed requests do not leave stale pending fetch state behind.
- Added automated websocket lifecycle tests covering manual disconnect, connection callbacks, auto-reconnect behavior, and
doc(..., idField: ...)overrides.
3.0.3 #
- Added support for a custom document identifier key through
MongoRealtime.collection(..., idField: ...). This key is now propagated todoc(...), document fetches, document streams, andwatchregistrations so packages using another field than_idcan work consistently across the full API. - Removed the implicit default singleton URL (
ws://localhost:3000).MongoRealtime.instanceand the globalrealtimegetter now throw untilMongoRealtime.connect(...)is called, avoiding unpredictable accidental connections. - Updated
RealtimeDocumentReferencesoupdate()anddelete()target the configured identifier key instead of always using_id. This makes document references usable with collections keyed by fields such asemail,slug, or any other unique identifier. - Improved
DbWatcherand internal DB change routing so document watchers using a customidFieldare matched correctly when realtime events are received. - Added
RealtimeQueryBuilder.delete()to delete all documents matching the current query filter, with support for optimistic local cache updates. - Improved optimistic writes so
insert(),update(), anddelete()now apply their local cache changes before the websocket request is sent. This makes the package feel more responsive for clients relying on optimistic UI behavior. - Fixed local application of MongoDB array update operators by ensuring list fields are converted to growable Dart lists before applying updates such as
$push,$pull, or related mutations. This prevents failures or inconsistent cache state when optimistic updates modify array fields. - Added and updated test/demo coverage around custom
idFieldusage, document watching, query composition, and optimistic updates.
3.0.2 #
- Added
streamWithValuemethod for streaming parsed documents directly instead of raw change events. This allows users to work with typed data in their streams without needing to manually parse change events.
3.0.1 #
- Simplified the internal realtime architecture by merging message handling into
MongoRealtimeand inlining socket connection management intoRealtimeWebSocketService, removing the extraRealtimeEventProcessorandRealtimeSocketConnectionlayers. - Fixed
RealtimeQueryBuilder.or()so eachor(...)block is preserved as its own$orgroup inside the root$andchain instead of flattening all clauses into a single root-level$or. - Fixed
cache_managerso it prevent duplicate entries in the cache when multiple queries with the same collection and filter are created. This prevents memory bloat and ensures consistent caching behavior across queries. - Added
updatemethod toRealtimeQueryBuilderfor performing updates on documents matching the query filter - Updated every
updatemethod to support MongoDB update operators like$set,$unset,$inc,$push,$pull,$addToSet, and$renamefor more flexible updates.
3.0.0 (Breaking Changes) #
- Major Refactoring: Complete redesign of the library architecture with improved separation of concerns.
- Replaced
socket_io_clientwithweb_socket_channelfor better WebSocket management. - Removed
flutter_reactivedependency, simplified reactive patterns with native Dart streams. - Removed Flutter dependency - library is now pure Dart.
- New API: Changed from
MongoRealtime.init()toMongoRealtime.connect(). - Collection API: Replaced direct stream methods with
collection(name)anddoc(id)accessors. - Query Builder: Added
RealtimeQueryBuilderfor fluent query construction withwhere(),sort(),limit()methods. - Document References: New
RealtimeDocumentReferenceandRealtimeCollectionReferenceclasses for better type safety. - DB Watchers: Replaced
onChange()callbacks withDbWatcherfor listening to database changes (insert, update, delete). - Event Processing: New
RealtimeEventProcessorfor handling server messages with better error handling. - Caching: Improved internal caching with
RealtimeCacheManagerfor better performance. - Query Manager: New
RealtimeQueryManagerfor managing active queries and subscriptions. - Removed
RealtimeBuilderFlutter widget - use nativeStreamBuilderinstead. - Removed
Uuidutility class - generate IDs externally. - Improved logging with Dart's
developer.log.
2.1.1 #
- Updated
flutter_reactivedependency to^1.0.1.
2.1.0 #
- Updated deprecated Readme and dart docs comments.
- Fixed realtime stream filtering and sorting so
filterandsortByare now applied to emitted results. - Improved socket stream lifecycle management to avoid duplicate handlers and stale realtime registrations across rebuilds and reconnections.
- Added cleanup for socket listeners and cached realtime stream state when a stream is no longer observed.
- Updated
RealtimeBuilderto reuse its stream instance and refresh it only when parameters change. - Updated example app to a concrete Flutter realtime dashboard demo.
2.0.4 #
- No more use
sortOrderDesc. Just usereverse
2.0.0 (Breaking Changes) #
- Stream events need a limit parameter now to avoid large data transfers.
- listStream() and listStreamMapped() methods now are named stream() and streamMapped() respectively.
- DB operations (count, find, findOne, update and updateOne) are now avaailable on MongoRealtimeCol and MongoRealtimeDoc classes.
1.2.0 #
- Updated minimum server version to 1.2.0
- Auto reconnect when listening to a list stream and the connection is lost.
- Added sortBy and sortOrderDesc parameters to listStream and listStreamMapped methods to sort the list by an attribute in ascending or descending order.
1.1.3 #
- Changed listStreamMapped to return a broadcast stream so multiple listeners can listen to the same stream.
- Fixed connect and forceConnect methods.
1.1.2 #
- Fixed an issue where socket lose all registered streams after a reconnection.
- Fixed multiple handlers being called many times when listening to the same list stream. Here was how to reproduce the issue:
realtime.listStreamMapped<String?>(
"usersWithName",
fromMap: (doc) => doc["name"],
filter: (value) {
return value.toString().startsWith("A");
},
).listen((s) {
print("Name startsWith A:");
print(s);
});
realtime.listStreamMapped<String?>(
"usersWithName",
fromMap: (doc) => doc["name"],
filter: (value) {
return value.toString().startsWith("B");
},
).listen((s) {
print("Name startsWith B:");
print(s);
});
/** Both streams are listened to the same "usersWithName" streamId
* So after each "listen", both handlers are called.
* That means 2x2=4 times after 2 listens, 3x3=9 times after 3 listens, etc.
* This is fixed now by tracking streamId with a unique registerId for each listen.
*/
1.1.1 #
- New way to listen events with
onChange()method onMongoRealtimeDB,MongoRealtimeColandMongoRealtimeDocclasses. - You can now listen to document changes with
MongoRealtime().col(collectionName).doc(docId).onChange(). - Support of list streams with
listStream()andlistStreamMapped<T>()methods.
0.1.1 #
- New method forceConnect() to force a connection until successful or retries exhausted
0.1.0 #
- autoConnect option (default false) to connect automatically on init()
- Added connect() method to manually connect when autoConnect is false
- Added realtime getter for easier access to the singleton instance
- Added authData parameter to send additional data with the auth token