mongo_realtime 3.0.2
mongo_realtime: ^3.0.2 copied to clipboard
A Dart package that allows you to listen in real-time to changes in a MongoDB database
Changelog #
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