import 'dart:typed_data'; import 'package:fis_common/extensions/date.dart'; import 'package:fis_common/web/shell_api_hepler.dart'; import 'package:vid/us/vid_us_data_http_reader.dart'; import '../reader.dart'; class AsyncShellVidDataReader extends AsyncVidDataReaderBase { final int minChunkSize; late final String id = DateTime.now().format('MMddHHmmssSSS') + hashCode.toString(); AsyncShellVidDataReader( String url, { DownloadCallback? downloadCallback, this.minChunkSize = 65536, }) : super(url, downloadCallback: downloadCallback); @override void close() { ShellApiHelper.call('cancelFetchVid', id); } @override void startDownload() async { final size = await getFileSize(); // 获取到size即开始下载 if (size == null) { setError(true, 'Get file size fail.'); } } /// 接收分片数据 void receiveChunk(Uint8List chunk) { appendChunk(chunk); final progress = downloadedSize / totalSize; updateProgress(progress); } Future getFileSize() async { final result = await ShellApiHelper.call( 'fetchVid', { 'Id': id, 'Url': url, 'MinChunkSize': minChunkSize, }, ); return result; } }