reactive_data_manager 1.0.0
reactive_data_manager: ^1.0.0 copied to clipboard
Sync data across the app
Reactive Data Manager #
A Flutter package that provides a robust, reactive data management solution with built-in caching, optimistic updates, and error handling capabilities.
Features #
- π Reactive data streams
- πΎ Automatic caching
- β‘ Optimistic updates
- π Data filtering
- β Error handling
- π§Ή Automatic resource cleanup
Installation #
Add this to your pubspec.yaml:
dependencies:
reactive_data_manager: ^1.0.0
Basic Usage #
// Create a manager instance
final userManager = ReactiveDataManager<int, User>(
fetcher: (id) => fetchUserFromApi(id),
updater: (id, user) => updateUserInApi(id, user),
);
// Get data stream
Stream<User?> userStream = userManager.getStream(userId);
// Fetch or refresh data
User user = await userManager.getData(userId);
// Force refresh
User freshUser = await userManager.getData(userId, forceRefresh: true);
// Update data
await userManager.updateData(userId, updatedUser);
Advanced Usage #
With Data Filtering #
ReactiveDataManager<String, Data>(
fetcher: fetchData,
updater: updateData,
fetchFilter: (key, data) {
// Filter fetched data
return data.isValid ? data : null;
},
updateFilter: (key, result) {
// Filter update results
return result.success ? result.data : null;
},
);
In Flutter Widgets #
StreamBuilder<User?>(
stream: userManager.getStream(userId),
builder: (context, snapshot) {
if (snapshot.hasError) {
return ErrorWidget(snapshot.error!);
}
if (!snapshot.hasData) {
return LoadingWidget();
}
return UserWidget(user: snapshot.data!);
},
);
Cleanup #
Don't forget to dispose of the manager when it's no longer needed:
@override
void dispose() {
userManager.dispose();
super.dispose();
}
License #
MIT License - see the LICENSE file for details