0 purchases
data cache manager
Data Cache Manager #
A Flutter cache manager plugin for storing and managing Dart data types.
Getting Started #
Add this to your project's pubspec.yaml file:
dependencies:
data_cache_manager: ^1.2.0
copied to clipboard
Usage #
Initialization #
The easiest way is to use the provided DefaultDataCacheManager.instance to get a default instance of the cache manager:
import 'package:data_cache_manager/data_cache_manager.dart';
final DataCacheManager manager = DefaultDataCacheManager.instance;
copied to clipboard
Adding data to cache #
DataCacheManager can store most of the data types in Dart, see this section for a list of supported data types.
To add data, simply use the following method:
final String key = 'key'; // The unique key for your data
final String value = 'value'; // The data to cache
await manager.add(key, value); // Add the data to local cache
copied to clipboard
Storing different data with the same key
In some cases, you might want to store different data with the same key. For example, when you are querying data from a database and paginating your data results. You can pass in the parameters you used to query the data as a Map when caching the data:
// The parameters you used to query the data in the first page
final Map<String, dynamic> firstParams = {'page': 1};
// The data on the first page
final List<int> firstValue = [0, 1, 2, 3, 4];
// The parameters you used to query the data in the second page
final Map<String, dynamic> secondParams = {'page': 2};
// The data on the second page
final List<int> secondValue = [5, 6, 7, 8, 9];
// Add the data to local cache
await manager.add(key, firstValue, queryParams: firstParams);
await manager.add(key, secondValue, queryParams: secondParams);
copied to clipboard
Getting data from cache #
To get data from the cache, simply use the same key that you used to store the data:
final cachedData = await manager.get(key);
copied to clipboard
If you passed in queryParams when storing the data, you can also use the same queryParams to get the respective data from the cache:
// firstCache will be [0, 1, 2, 3, 4]
final firstCache = await manager.get(key, queryParams: firstParams);
// secondCache will be [5, 6, 7, 8, 9]
final secondCache = await manager.get(key, queryParams: secondParams);
copied to clipboard
To avoid getting outdated cached data, you can pass in a DateTime to tell the cache manager when the data has been updated. If the cached data is stored earlier than the given DateTime, it will return null and remove the outdated cache.
final DateTime updatedAt = DateTime.now();
// cachedData will be null as it has been outdated
final cachedData = await manager.get(key, updatedAt: updatedAt);
copied to clipboard
Removing data from cache #
To remove data from the cache, simply use the same key that you used to store the data:
await manager.remove(key);
copied to clipboard
If you passed in queryParams when storing the data, you can also use the same queryParams to remove the respective data from the cache:
// Removes [0, 1, 2, 3, 4]
await manager.remove(key, queryParams: firstParams);
// Removes [5, 6, 7, 8, 9]
await manager.remove(key, queryParams: secondParams);
copied to clipboard
To remove all the data with the same key, use the following method instead:
await manager.removeByKey(key);
copied to clipboard
Customization #
If you want to customize and configure the cache manager, you will have to create your own class and store the cache manager instance. It is important to only create and use one cache manager instance with the same dbKey (which can be configured) throughout your application. See below for an example:
class MyDataCacheManager {
static DataCacheManager instance = DataCacheManager(
config: Config(
dbKey: 'db_key',
useMemCache: true,
useNtpDateTime: false,
cleanupOnInit: false,
cleanupInterval: Duration(seconds: 30),
stalePeriod: Duration(days: 30),
maxCacheSize: 10000000,
),
);
}
copied to clipboard
Other Implementations #
firebase_db_cache for caching data fetched from firebase_database
Frequently Asked Questions #
What data types are supported? #
The supported data types are:
int
double
String
bool
List
Map
Note that:
Iterable is not supported, use toList() to convert any iterables
List and Map has to be storing the types specified above
When do the cached data get removed? #
You can use the stalePeriod and maxCacheSize parameters in Config to control when the data get removed.
stalePeriod can be used to define the minimum duration for a cached data to become stale. When the data becomes stale, it will be removed.
maxCacheSize is the maximum cache size in bytes. When the cache size gets over this limit, it will start removing data. The data that has been stale for the longest period of time and has the least amount of usage will be removed first and so on.
How to schedule the cached data cleanup? #
You can use the cleanupOnInit and cleanupInterval parameters in Config to setup when to run and clean the cached data.
Setting cleanupOnInit to true will only run the cleanup once when DataCacheManager is initialized. This will also override cleanupInterval to ensure that the cleanup is only run once.
You can also define cleanupInterval to set how often the cache manager should run and clean the data.
For personal and professional use. You cannot resell or redistribute these repositories in their original state.
There are no reviews.