simple_cached_value 1.0.0
simple_cached_value: ^1.0.0 copied to clipboard
A flutter simple cached value project.
simple_cached_value #
A lightweight caching abstraction for Flutter apps.
Supports both in-memory and persistent caching using shared preferences, with flexible TTL and value provider support.
Features #
- Easy-to-use cache interface with TTL support
- In-memory cache (
InMemoryCacheObject
) - Persistent cache using SharedPreferences (
SharedPreferencesCacheObject
) - Customizable serialization logic
- Value auto-refresh via
valueProvider
Getting started #
Add the dependency in your pubspec.yaml
:
dependencies:
simple_cache: ^0.1.0
Then run:
flutter pub get
Usage #
In-memory cache #
final cache = InMemoryCacheObject<int>(
value: 42,
ttl: Duration(minutes: 5),
valueProvider: () async => fetchValueFromServer(),
);
final value = await cache.getValue();
Persistent cache (SharedPreferences) #
final prefs = await SharedPreferences.getInstance();
final cache = PersistentCachedValue<int>(
cacheKeyPrefix: 'my_key',
ttl: Duration(minutes: 10),
persistentProvider: SharedPreferenceProvider(
getSharedPreference: () => prefs,
),
fromString: (s) => int.tryParse(s),
toString: (v) => v.toString(),
valueProvider: () async => fetchValueFromServer(),
);
final value = await cache.getValue();
Custom serialization #
You can also use predefined delegates like IntSerializationDelegate
, StringSerializationDelegate
, BoolSerializationDelegate
, and DoubleSerializationDelegate
to simplify serialization.
Example #
final intDelegate = IntSerializationDelegate();
final stringDelegate = StringSerializationDelegate();
final boolDelegate = BoolSerializationDelegate();
final doubleDelegate = DoubleSerializationDelegate();
int? i = intDelegate.fromString("42");
String s = stringDelegate.formatString("hello");
bool? b = boolDelegate.fromString("true");
double? d = doubleDelegate.fromString("3.14");
Additional information #
This library is useful when building apps that need caching behavior without depending on external databases.
Great for optimizing network requests and storing frequently accessed values with expiration.
Contributions and issues welcome!