12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- 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<int?> getFileSize() async {
- final result = await ShellApiHelper.call(
- 'fetchVid',
- {
- 'Id': id,
- 'Url': url,
- 'MinChunkSize': minChunkSize,
- },
- );
- return result;
- }
- }
|