preStart method

  1. @override
  2. @mustCallSuper
void preStart()
override

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