提交 d02bd486 authored 作者: 张国庆's avatar 张国庆

feat: 新增同步请求方式,支持解析实体

上级 d9108b8f
...@@ -153,6 +153,59 @@ abstract class BaseDio { ...@@ -153,6 +153,59 @@ abstract class BaseDio {
} }
} }
} }
// 构建网络请求同步请求
Future<T?> requestSyncWithModel<T>({
required String requestUrl,
required Method method,
// 是否单独处理异常
bool handleError = false,
Options? options,
Map<String, dynamic>? queryParameters,
Object? data,
T Function(Map<String, dynamic>)? fromJson,
}) async {
try {
final Response response = await dio.request(
requestUrl,
queryParameters: queryParameters,
data: data,
options: _checkOptions(method.value, options),
);
try {
final String data = response.data.toString();
final bool isCompute = data.length > 10 * 1024;
final Map<String, dynamic> map = isCompute
? await jsonTransformer.parseJson(data)
: jsonTransformer.parseAndDecode(data);
var responseCode = map['code']?.toString();
if (responseCode == "100" || responseCode == "-100") {
logger.e("登录过期:${map['msg']}");
onLoginExpire();
return null;
}
// 不处理错误时,直接返回null 需要单独处理错误时,返回全部数据部分
if (responseCode != "0") {
logger.e("请求错误:${map['code']} ${map['msg']}");
return handleError ? map as T? : null;
}
if (fromJson != null) {
return handleError ? fromJson(map) : fromJson(map['data']);
}
return handleError ? map as T? : map['data'] as T?;
} catch (e) {
logger.e("数据解析错误:${e.toString()}");
return null;
}
} on DioException catch (e) {
var result = await _handleHttpException(e);
logger.e("请求错误:${result?["message"]}");
// result 为null时,已调用重新登录方法 onLoginExpire,onLoginExpire需重写
return null;
}
}
// 处理网络请求成功逻辑 // 处理网络请求成功逻辑
void _onNetSuccess(Response response, NetSuccessCallback successCallback, void _onNetSuccess(Response response, NetSuccessCallback successCallback,
......
import 'dart:io';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_clx_base/common/extension.dart'; import 'package:flutter_clx_base/common/extension.dart';
import 'package:fluttertoast/fluttertoast.dart'; import 'package:fluttertoast/fluttertoast.dart';
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论