request method
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',
),
);
}
}