yknetworking 0.1.6
yknetworking: ^0.1.6 copied to clipboard
yknetworking.
CHANGELOG #
0.1.6 #
Breaking Changes #
- Safe API 入口合并。
safeGet()/safePost()/safePut()/safeDelete()/safePatch()合并为统一的safeRequest(method:)。调用方需将api.safeGet('/t')改为api.safeRequest('/t', method: YKNetworkingMethod.get)。 YKNetworkException新增retryContext字段。 throwing API 的 catch 分支可直接从异常获取重试上下文,无需通过 safe API。
Internal #
- throwing API(
get()/post()/...)不再中转safe*+_unwrap,改为直接调用executeOrThrow,错误通过 Future 原生 error 通道传递。 YKBaseNetworking新增executeOrThrow/executeUploadOrThrow/executeDownloadOrThrow方法。_runOnErrorChain创建的异常携带RetryContext,使 throwing API 和 safe API 的异常一致携带重试信息。- 移除
_unwrap方法。 - 测试覆盖:39 个测试,包含
.catchError()Future 错误通道验证。
0.1.5 #
YKInterceptorResponse.data从final改为可变,允许响应拦截器修改返回数据
0.1.4 #
Breaking Changes #
- API 重构:直接返回
Future<T>。get()/post()/put()/delete()/patch()/request()/upload()/download()/retry()现在直接返回数据,失败时抛出YKNetworkException。旧的非抛出行为请使用对应的safe*变体(如safeGet()→Future<YKResult<T>>)。 - Dart SDK >=3.0.0 必须(
sealed class需要)。 - 删除
YKNetworking构造函数回调。handleData/dynamicHeader/dynamicParams/errorCallBack/showLoadingCallBack/cacheRequest已移除,改用拦截器系统替代。 - 删除
disableDynamicHeader/disableDynamicParams/disableHandleData布尔值。 替换为基于类型的skipInterceptors: [InterceptorRef]。 YkNetworkConnectivity重命名为YKNetworkConnectivity。 访问方式从instance改为getInstance(),与YKNetworkingConfig保持一致。- 删除
YKNetworkingResponse。 替换为YKResult<T>密封类(safe API)。 - 删除
YkNetworkingInterceptormixin。 替换为YKInterceptor抽象类。 retry()的headers参数必传,强制开发者重新提供凭据。
New Features #
- 拦截器链引擎: 实例级注册,优先级排序,请求/响应/错误三阶段执行。
YKInterceptorType确保 O(N) 而非 O(3N)。 - 内置拦截器:
DynamicHeaderInterceptor、DynamicParamsInterceptor、HandleDataInterceptor、RedirectInterceptor。 - 重试系统: 拦截器内重试(
onError+YKRetryHandler回调)和外部重试(api.retry())。 - 请求取消: 通过
CancelToken支持,safe API 返回YKCancelled<T>。 - 安全 API(
safe*变体): 返回YKResult<T>密封类(YKSuccess<T>/YKFailure<T>/YKCancelled<T>),需要完全控制时使用。 - 类型安全的
skipInterceptors: 按名称(ByName)或类型(ByType<T>)跳过,链压缩。 ClearInterceptors()保护: 设置isProtected: true的拦截器不会被清除。- 非幂等拦截器: 设置
isIdempotent: false的拦截器在重试时自动跳过。 dispose()生命周期:YKNetworking和YKInterceptor均支持,取消进行中的请求并释放资源。- 结构化错误:
YKNetworkException,包含YKErrorType枚举(connectionTimeout / receiveTimeout / sendTimeout / dnsFailure / tlsFailure / clientError / serverError / redirectRequired / cancelled / unknown)。 - DELETE 和 PATCH 方法。
RetryContext: 最小重试信息,不含 headers(凭据安全)。@visibleForTesting YKNetworkingConfig.resetForTesting()用于测试隔离。
Internal #
- 拦截器链精简为单一私有流水线
_executeWithChain,消除 execute/executeUpload/executeDownload 之间的代码重复。 - 修复 shared
dio.options.baseUrl的并发请求竞态条件。 - 修复
_runOnErrorChain中redirectRequired异常被静默吞没的问题。 - 修复
as T强制转换:类型不匹配现在会返回YKFailure而非未捕获的TypeError。 YKNetworkConnectivity流订阅正确存储并可在dispose()中取消;setup()已实现幂等。DynamicHeaderInterceptor/DynamicParamsInterceptor使用??=而非?.addAll以避免静默丢弃数据。maxRetries断言为非负数,负值会被钳位到 0。downloadPath守卫同时检查 null 和空字符串。
0.1.3 #
- 新增 YKNetworkConnectivity
0.1.2 #
- 更新 contentType
0.1.1 #
- 修复 contentType
- 修复 bug
- 新增 disableDynamicHeader
- 新增 disableDynamicParams
- 新增 disableHandleData
0.1.0 #
- 新增 contentType
- 修复 bug