Flutter http包的简单封装
依赖http
dependencies:
flutter:
sdk: flutter
#网络
http: ^0.13.1
执行 flutter pub get
网络请求类
import 'package:http/http.dart' as http;
typedef onError = void Function(int statusCode, Object error);
typedef onSuccess = void Function(dynamic data);
// typedef onTransform = dynamic Function(dynamic body);
const statusErrorCode = -200;
class NetWorkHelper {
///get request
static Future requestGet(String url, onSuccess success,
{Map<String, String>? params, Convert? transform, onError? error}) async {
url = joinParams(params, url);
try {
Uri uri = Uri.parse(url);
http.Response response = await http.get(uri);
checkResponseData(response, transform, success, error);
} catch (e) {
print("package:net/network.dart error get data:$e");
if (error != null) {
error(statusErrorCode, e.toString());
}
}
}
///Stitching parameters(拼接参数)
static String joinParams(Map<String, String>? params, String url) {
if (params != null && params.isNotEmpty) {
StringBuffer stringBuffer = StringBuffer("?");
params.forEach((key, value) {
stringBuffer.write("$key" + "=" + "$value" + "&");
});
String paramStr = stringBuffer.toString();
paramStr = paramStr.substring(0, paramStr.length - 1);
url = url + paramStr;
}
return url;
}
///post request
static Future<dynamic> requestPost(String url, onSuccess success,
{Map<String, String>? params, Convert? transform, onError? error}) async {
try {
Uri uri = Uri.parse(url);
http.Response response = await http.post(
uri,
body: params,
);
checkResponseData(response, transform, success, error);
} catch (e) {
print("package:net/network.dart error post data:$e");
if (error != null) {
error(statusErrorCode, e.toString());
}
}
}
///处理response
static void checkResponseData(http.Response response, Convert? transform,
onSuccess success, onError? error) {
if (response.statusCode == 200) {
dynamic data = response.body;
if (transform != null) {
data = transform.transform(data);
}
print("success get data:$data");
success(data);
} else {
print('Request get failed with status: ${response.statusCode}');
if (error != null) {
error(response.statusCode, "fail get data");
}
}
}
}
数据转换
abstract class Convert {
// Transform create();
dynamic transform(dynamic data);
}
import 'dart:convert';
class JSONConvert extends Convert {
@override
dynamic transform(data) {
return jsonDecode(data);
}
// Transform create() {
// return JsonTransform();
// }
static JSONConvert create() {
return JSONConvert();
}
}
Example
//Json
NetWorkHelper.requestPost(url, (data) {
print("data=$data");
},params: ,transform: JSONConvert.create());
//www.baidu.com
NetWorkHelper.requestGet(
"https://www.baidu.com/",
(data) {
print("data=$data");
},
);
参考:Http库 网络请求封装