vid_data.dart 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. import 'dart:typed_data';
  2. import 'package:vid/us/vid_us_data_http_reader.dart';
  3. import '../vid_data.dart';
  4. import 'reader.dart';
  5. class AsyncShellVidImageData extends AsyncVidImageDataBase {
  6. static final _readerMap = <String, AsyncShellVidDataReader>{};
  7. AsyncShellVidImageData(String url, {DownloadCallback? downloadCallback})
  8. : super(url, downloadCallback: downloadCallback);
  9. @override
  10. AsyncShellVidDataReader createReader(
  11. String url, {
  12. DownloadCallback? downloadCallback,
  13. }) {
  14. final reader = AsyncShellVidDataReader(
  15. url,
  16. downloadCallback: downloadCallback,
  17. );
  18. _readerMap[reader.id] = reader;
  19. return reader;
  20. }
  21. @override
  22. void close() {
  23. super.close();
  24. final readerId = getReader<AsyncShellVidDataReader>().id;
  25. _readerMap.remove(readerId);
  26. }
  27. static void receiveChunk(String id, Uint8List chunk) {
  28. if (_readerMap.containsKey(id)) {
  29. final reader = _readerMap[id]!;
  30. reader.receiveChunk(chunk);
  31. if (reader.downloadedSize >= reader.totalSize) {
  32. // 下载完成即删除Map缓存
  33. _readerMap.remove(id);
  34. }
  35. }
  36. }
  37. }