flutter_disk_lru_cache
Dart version based on Android disk LRU cache migration The source code comes from android disk LRU cache
Usage
To use this plugin, follow the installing guide.
Example
import 'package:flutter/material.dart';
import 'package:crypto/crypto.dart';
import 'package:path_provider/path_provider.dart';
import 'package:flutter_disk_lru_cache/flutter_disk_lru_cache.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
Directory? tempDirectory = await getTemporaryDirectory();
if (tempDirectory == null) {
return;
}
/// init
DiskLruCache diskLruCache = await DiskLruCache.open(tempDirectory!, valueCount: "file version nums",version: "1.0.0" ,maxSize: 20 * 10274 * 1024 (20m));
/// key name
final String key = md5.convert(utf8.encode("https://xxxxx.com/xxx.png")).toString();
/// write data to disk cache
Editor? editor = await diskLruCache.edit(key);
if (editor == null) {
throw Exception("editor is null");
}
/// request image uint8List
final Uint8List imageBytes = await getImageUintList();
/// open io stream
FaultHidingIOSink faultHidingIOSink = editor.newOutputIOSink(0);
/// write uint8List to disk,but it is dirty,is not commited
await faultHidingIOSink.writeBytes(imageBytes);
/// write text to disk,but it is dirty,is not commited
await faultHidingIOSink.write("text");
/// flush io
await faultHidingIOSink.flush();
/// close the io stream
await faultHidingIOSink.close();
/// comfirm commit
await editor.commit(diskLruCache);
/// cancel commit
await editor.abort(diskLruCache);
/// get cache file information
Snapshot? snapshot = await editor.get(key);
/// request to valueCount version
RandomAccessFile inV1 = snapshot.getRandomAccessFile(0);
Uint8List bytes = inV1.readSync(snapshot.getLengths(0));
/// bytes to text
String text = utf8.decode(bytes);
/// close snapshot
snapshot.close();
/// edit snapshot
Editor? editor = await diskLruCache.edit(snapshot.key,sequenceNumber: snapshot.sequenceNumber);
/// remove cache
await diskLruCache.remove(key);
/// flush cache
await diskLruCache.flush();
/// close disk cache
await diskLruCache.close();
/// Closes the cache and deletes all of its stored values. This will delete
/// all files in the cache directory including files that weren't created by the cache.
await diskLruCache.delete();
}