我们要对dio进行封装
class HttpRequest {
static Future request(String url,{String method = "get",Map<String,dynamic>? params})async{
// 创建dio实例
BaseOptions baseOptions = BaseOptions(
baseUrl: base_url,
connectTimeout: Duration(seconds: 1)
);
final dio = Dio(baseOptions);
// 发送网络请求
Options options = Options(method: method);
try{
final result = await dio.request(url,queryParameters: params,options: options);
return result;
}on DioException catch(err){
throw err;
}
}
}
?下面我们分析一下
类定义:
HttpRequest
?是一个类,其中包含一个静态方法?request
,用于发送HTTP请求。静态方法定义:
request
?是一个静态方法,它接受一个URL和一个可选的参数对象。该方法返回一个Future,这意味着它是一个异步函数。method
,其默认值为 "get"。params
,它是一个键值对的Map,用于传递查询参数。创建Dio实例:
BaseOptions
?创建了一个Dio实例的配置。其中,baseUrl
?是基础URL,而?connectTimeout
?是连接超时时间(这里设置为1秒)。dio
?变量中。发送网络请求:
Options
?创建了一个请求选项对象,其中指定了请求的方法(默认为GET)。dio.request
?方法发送HTTP请求。传递了URL、查询参数和请求选项。异常处理:
try-catch
?块来捕获可能出现的Dio异常。如果发生异常,则重新抛出该异常。返回值:
此外我们还需要定义一个Model类型来解析存储
class Piece {
late String originName;
late String describe;
late int messageType;
late String messageIconUrl;
late String remarkName;
late String messageText;
late String messageDate;
late bool messageMute;
late bool messageUp;
Piece.fromMap(Map<String, dynamic> json) {
originName = json["originName"] ?? "";
describe = json["describe"] ?? "";
messageType = json["messageType"] ?? 0;
messageIconUrl = json["messageIconUrl"] ?? "";
remarkName = json["remarkName"] ?? "";
messageText = json["messageText"] ?? "";
messageDate = json["messageDate"] ?? "";
messageMute = json["messageMute"] ?? false;
messageUp = json["messageUp"] ?? false;
}
}
我们数据的api接口如下rap2api.taobao.org/app/mock/293606/api/chat
最后我们来看看如何使用
HttpRequest.request("http://rap2api.taobao.org/app/mock/293606/api/chat/list") //调用我们自己封装的类进行解析
.then((res){ // 返回的是一个Future
// print(res);
// print(res.data);
// print(res.data.runtimeType); //这时候打印出来是 map 类型
final the_list = res.data["list"];
print(the_list);
List<Piece> piece =[];
for(var sub in the_list){
piece.add(Piece.fromMap(sub));
}
print(piece);
print(piece[0].originName);
});
看看效果如下