file method

  1. @override
Future<File?> file(
  1. String id, {
  2. void onProgress(
    1. double
    )?,
  3. TransformCancelToken? cancelToken,
})
override

The asset's file, downloading from iCloud if necessary.

onProgress reports 0..1 for that download; cancelToken abandons it.

Implementation

@override
Future<File?> file(
  String id, {
  void Function(double)? onProgress,
  TransformCancelToken? cancelToken,
}) {
  if (failingFiles.contains(id)) {
    return Future<File?>.error(
      const TransformException(
        TransformFailure.sourceUnreadable,
        'FakeAssetSource was told to fail this asset.',
      ),
    );
  }
  if (missingFiles.contains(id)) {
    onProgress?.call(1);
    return Future<File?>.value();
  }
  final File? registered = filesById[id];
  if (registered != null) {
    onProgress?.call(1);
    return Future<File?>.value(registered);
  }
  if (pendingFiles.contains(id)) {
    final Completer<File?> completer = Completer<File?>();
    _pending[id] = completer;
    if (onProgress != null) {
      _progressSinks[id] = onProgress;
    }
    return completer.future;
  }
  onProgress?.call(1);
  return Future<File?>.value(File('/fake/$id'));
}