preStart method
Task 启动之前会调用,该方法只会在第一次被 TaskManager 初始化的时候调用
Implementation
@override
@mustCallSuper
void preStart() {
// 如果已经取消了,直接报错
if (controller != null && controller!.cancelToken.isCancelled) {
throw StorageError(type: StorageErrorType.CANCEL);
}
controller?.notifyStatusListeners(StorageStatus.Init);
controller?.notifyProgressListeners(preStartTakePercentOfTotal);
retryLimit = config.retryLimit;
client.httpClientAdapter = config.httpClientAdapter;
client.interceptors.add(
InterceptorsWrapper(
onRequest: (options, handler) {
controller?.notifyStatusListeners(StorageStatus.Request);
options
..cancelToken = controller?.cancelToken
..onSendProgress = (sent, total) => onSendProgress(sent / total);
options.headers['User-Agent'] = _getUserAgent();
if (options.contentType == null) {
if (options.data is Stream) {
options.contentType = 'application/octet-stream';
} else {
options.contentType = 'application/json';
}
}
handler.next(options);
},
),
);
super.preStart();
}