native.dart 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. import 'dart:typed_data';
  2. import 'package:fis_common/logger/logger.dart';
  3. import 'package:fis_vid/cache/io.dart';
  4. import 'package:fis_vid/common/vid_download.dart';
  5. import 'package:vid/us/vid_us_image.dart';
  6. import 'package:vid/us/vid_us_image_data.dart';
  7. import 'base.dart';
  8. class VidImageFetcher extends VidImageFetcherBase {
  9. VidFileDownloadCancelToken? _downloadCancelToken;
  10. VidImageFetcher(String url) : super(url);
  11. @override
  12. Future<VidUsImage?> innerFetch() async {
  13. final vidBuffer = await _loadVidFile(url);
  14. if (vidBuffer != null) {
  15. final vidData = VidUsImageData(vidBuffer);
  16. final frame = vidData.getImage(0);
  17. return frame;
  18. }
  19. return null;
  20. }
  21. @override
  22. void dispose() {
  23. _downloadCancelToken?.cancel();
  24. }
  25. Future<Uint8List?> _loadVidFile(String url) async {
  26. final cachedFile = await VidNativeCache.ins.getCache(url);
  27. if (cachedFile != null) return cachedFile;
  28. _downloadCancelToken = VidFileDownloadCancelToken();
  29. final buffer = await VidFileDownloader.download(
  30. url,
  31. cancelToken: _downloadCancelToken,
  32. );
  33. if (buffer != null) {
  34. await VidNativeCache.ins.saveCache(url, buffer);
  35. }
  36. return buffer;
  37. }
  38. }