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 _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 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); }