putFileStream method
Future<File>
putFileStream(
- String url,
- Stream<
List< source, {int> > - String? key,
- String? eTag,
- Duration maxAge = const Duration(days: 30),
- String fileExtension = 'file',
override
Put a byte stream in the cache. When using an existing file you can use
file.openRead(). It is recommended to specify the eTag and the
maxAge. When maxAge is passed and the eTag is not set the file will
always be downloaded again. The fileExtension should be without a dot,
for example "jpg". When cache info is available for the url that path
is re-used.
The returned File is saved on disk.
Implementation
@override
Future<File> putFileStream(
String url,
Stream<List<int>> source, {
String? key,
String? eTag,
Duration maxAge = const Duration(days: 30),
String fileExtension = 'file',
}) async {
key ??= url;
var cacheObject = await _store.retrieveCacheData(key);
cacheObject ??= CacheObject(url,
key: key,
relativePath: '${const Uuid().v1()}'
'.$fileExtension',
validTill: DateTime.now().add(maxAge));
cacheObject = cacheObject.copyWith(
validTill: DateTime.now().add(maxAge),
eTag: eTag,
);
final file = await _config.fileSystem.createFile(cacheObject.relativePath);
// Always copy file
final sink = file.openWrite();
await source
// this map is need to map UInt8List to List<int>
.map((event) => event)
.pipe(sink);
_store.putFile(cacheObject);
return file;
}