request method

Future<Result> request(
  1. String? deviceIp,
  2. String fullPath,
  3. Map<String, dynamic>? bodyParams,
  4. Map<String, dynamic>? headers,
  5. bool isPost,
)

Implementation

Future<Result<dynamic>> request(
  String? deviceIp,
  String fullPath,
  Map<String, dynamic>? bodyParams,
  Map<String, dynamic>? headers,
  bool isPost,
) async {
  try {
    var rawResponse = await getResponse(
      isPost,
      fullPath,
      bodyParams,
      headers,
    );
    if (rawResponse is Map<String, dynamic>) {
      bool isSuccess = isResponseSuccess(rawResponse);
      if (isSuccess) {
        return Result.success(rawResponse);
      } else {
        final code = rawResponse['code'] ?? rawResponse['errCode'] ?? -1;
        if (code == 40100 || code == 00401) {
          bool isSuccess = await refreshToken(deviceIp);
          if (isSuccess) {
            return request(deviceIp, fullPath, bodyParams, headers, isPost);
          }
        }
        final message =
            rawResponse['msg'] ??
            rawResponse['errorMessage'] ??
            rawResponse['message'] ??
            "unknown error message";
        return Result.failure(
          NetworkError(errorCode: code, errorMessage: message),
        );
      }
    } else if (rawResponse is Response) {
      if (rawResponse.statusCode == 200) {
        return Result.success(rawResponse);
      } else if (rawResponse.statusCode == 401) {
        var isSuccess = await refreshToken(deviceIp);
        if (isSuccess) {
          return request(deviceIp, fullPath, bodyParams, headers, isPost);
        } else {
          return Result.failure(
            NetworkError(
              errorCode: rawResponse.statusCode.toString() ?? "-3",
              errorMessage: rawResponse.data,
            ),
          );
        }
      } else {
        return Result.failure(
          NetworkError(
            errorCode: rawResponse.statusCode.toString() ?? "-1",
            errorMessage: rawResponse.data,
          ),
        );
      }
    } else {
      return Result.failure(
        NetworkError(
          errorCode: ErrorCode.dataParseError.code,
          errorMessage: "unknown data type",
        ),
      );
    }
  } on DioException catch (e) {
    if (e.response?.statusCode == 401) {
      bool isSuccess = await refreshToken(deviceIp);
      if (isSuccess) {
        return request(deviceIp, fullPath, bodyParams, headers, isPost);
      }
    }
    return Result.failure(
      NetworkError(
        errorCode: e.response?.statusCode.toString() ?? "-1",
        errorMessage: ' response: ${e.response}',
      ),
    );
  } catch (e) {
    return Result.failure(
      NetworkError(
        errorCode: ErrorCode.unknownError.code,
        errorMessage: '发生异常: $e',
      ),
    );
  }
}