Browse Source

add cancel_token 4 data_host

melon.yin 2 years ago
parent
commit
8c850f426e

+ 10 - 1
lib/data_host/native/data_host.dart

@@ -19,6 +19,8 @@ class VidDataHost implements VidDataHostInterface {
 
   VidUsImageData? _data;
 
+  VidFileDownloadCancelToken? _downloadCancelToken;
+
   @override
   final String url;
 
@@ -56,6 +58,9 @@ class VidDataHost implements VidDataHostInterface {
 
   @override
   Future<void> release() async {
+    try {
+      _downloadCancelToken?.cancel();
+    } catch (e) {}
     _data = null;
   }
 
@@ -69,7 +74,11 @@ class VidDataHost implements VidDataHostInterface {
         final buffer = await file.readAsBytes();
         return buffer;
       } else {
-        final buffer = await VidFileDownloader.download(url);
+        _downloadCancelToken = VidFileDownloadCancelToken();
+        final buffer = await VidFileDownloader.download(
+          url,
+          cancelToken: _downloadCancelToken,
+        );
         if (buffer != null) {
           file = await file.create(recursive: true);
           file.writeAsBytes(buffer);

+ 2 - 2
lib/data_host/vid_download.dart

@@ -3,7 +3,7 @@ import 'dart:typed_data';
 import 'package:dio/dio.dart' as dio;
 import 'package:fis_common/logger/logger.dart';
 
-class VidFileDownloadCancel extends dio.CancelToken {}
+class VidFileDownloadCancelToken extends dio.CancelToken {}
 
 typedef VidFileDownloadProgressCallback = void Function(int count, int total);
 
@@ -12,7 +12,7 @@ class VidFileDownloader {
 
   static Future<Uint8List?> download(
     String url, {
-    VidFileDownloadCancel? cancelToken,
+    VidFileDownloadCancelToken? cancelToken,
     VidFileDownloadProgressCallback? onReceiveProgress,
   }) async {
     try {

+ 10 - 1
lib/data_host/web/broswer.dart

@@ -8,6 +8,8 @@ class _VidDataHostBroswer implements VidDataHostInterface {
 
   VidUsImageData? _data;
 
+  VidFileDownloadCancelToken? _downloadCancelToken;
+
   @override
   int get frameCount => _data!.imageCount;
 
@@ -31,7 +33,11 @@ class _VidDataHostBroswer implements VidDataHostInterface {
 
   @override
   Future<VidDataHostLoadInfo?> load() async {
-    final bytes = await VidFileDownloader.download(url);
+    _downloadCancelToken = VidFileDownloadCancelToken();
+    final bytes = await VidFileDownloader.download(
+      url,
+      cancelToken: _downloadCancelToken,
+    );
     if (bytes != null && bytes.isNotEmpty) {
       _data = VidUsImageData(bytes);
       final info = VidDataHostLoadInfo(_data!.probe);
@@ -42,6 +48,9 @@ class _VidDataHostBroswer implements VidDataHostInterface {
 
   @override
   Future<void> release() async {
+    try {
+      _downloadCancelToken?.cancel();
+    } catch (e) {}
     _data = null;
   }
 }