57 lines
1.6 KiB
Dart
57 lines
1.6 KiB
Dart
import 'package:dio/dio.dart';
|
|
|
|
import '../../hj_utils/text_util.dart';
|
|
|
|
/// 取消token管理
|
|
class CancelTokenManager {
|
|
static CancelTokenManager? _instance;
|
|
//取消token单例
|
|
factory CancelTokenManager() {
|
|
_instance ??= CancelTokenManager._();
|
|
return _instance!;
|
|
}
|
|
CancelTokenManager._();
|
|
|
|
/// 取消token列表
|
|
final List<CancelTokenWarp> _cancelTokens = [];
|
|
|
|
/// 创建cancleToken如果需要
|
|
/// [url]
|
|
CancelToken createToken(String url, [String uniquekey='']) {
|
|
var ctw = CancelTokenWarp(url, CancelToken())..uniqueKey = uniquekey;
|
|
_cancelTokens.add(ctw);
|
|
return ctw.token;
|
|
}
|
|
|
|
/// 获取cancleToken如果需要
|
|
/// [url]
|
|
CancelToken? getToken(String url, [String uniquekey = '']) {
|
|
// indexWhere 找不到返回 -1,避免 firstWhere 无 orElse 时抛 StateError
|
|
final idx = _cancelTokens.indexWhere((it) =>
|
|
TextUtil.isEmpty(uniquekey) ? it.url == url : (it.url == url && it.uniqueKey == uniquekey));
|
|
return idx < 0 ? null : _cancelTokens[idx].token;
|
|
}
|
|
|
|
List<CancelTokenWarp> get peekList => _cancelTokens;
|
|
|
|
/// 删除
|
|
/// [url]
|
|
CancelToken? remove(String url, [String uniquekey = '']) {
|
|
// indexWhere 找不到返回 -1,避免 firstWhere 无 orElse 时抛 StateError
|
|
final idx = _cancelTokens.indexWhere((it) =>
|
|
TextUtil.isEmpty(uniquekey) ? it.url == url : (it.url == url && it.uniqueKey == uniquekey));
|
|
if (idx < 0) return null;
|
|
return _cancelTokens.removeAt(idx).token;
|
|
}
|
|
|
|
/// 正在请求的长度
|
|
int get length => _cancelTokens.length;
|
|
}
|
|
|
|
class CancelTokenWarp {
|
|
String url;
|
|
CancelToken token;
|
|
String? uniqueKey;
|
|
CancelTokenWarp(this.url, this.token);
|
|
}
|