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