upload_cancel_handler.dart 1.09 KB
import 'package:appframe/data/repositories/message/upload_start_handler.dart';
import 'package:appframe/services/dispatcher.dart';
import 'package:flutter/cupertino.dart';

class UploadCancelHandler extends MessageHandler {
  String? _targetUnique;
  Map<String, UploadStartHandler>? _activeUploads;

  void setTargetUnique(String? targetUnique) {
    _targetUnique = targetUnique;
  }

  void setActiveUploads(Map<String, UploadStartHandler> activeUploads) {
    _activeUploads = activeUploads;
  }

  @override
  Future<dynamic> handleMessage(params) async {
    try {
      final uploads = _activeUploads;
      if (uploads == null || uploads.isEmpty) {
        return true;
      }

      if (_targetUnique != null && uploads.containsKey(_targetUnique)) {
        uploads[_targetUnique]?.cancel();
      } else {
        // H5 未传 unique 时,取消所有活跃上传
        for (var handler in uploads.values) {
          handler.cancel();
        }
      }
    } catch (e) {
      debugPrint(e.toString());
    } finally {
      _targetUnique = null;
      _activeUploads = null;
    }
    return true;
  }
}