封装网络库考虑的几个方面:
恳求参数的封装:
将恳求所需的参数进行封装,例如 URL、恳求头、恳求体等。能够界说一个一致的数据结构或模型类来表示恳求参数,以便于传递和管理。
呼应成果的封装:
将网络恳求回来的呼应成果进行封装,例如状况码、呼应头、呼应体等。同样,能够界说一个一致的数据结构或模型类来表示呼应成果,以便于处理和解析。
过错处理的封装:
对网络恳求可能出现的过错进行封装和处理,例如网络衔接失败、超时、服务器过错等。能够界说自界说的反常类或过错码,以及相应的过错处理机制。
拦截器的封装:
如果第三方网络库支持拦截器机制,你能够封装拦截器,用于在恳求建议前或呼应回来后进行额外的处理,如增加身份验证、日志记录等。
封装示例
/*
* @Author: HaiJun
* @FilePath: flutter_demo_showlibutilshttp.dart
* @Description:
*
*/
import 'package:dio/dio.dart';
import './CustomInterceptor.dart';
class HttpApi {
// 装备基本的恳求选项
static final BaseOptions options = BaseOptions(
baseUrl: 'http://localhost:3001/', // 设置恳求的根底 URL
method: 'GET', //默认恳求方法
connectTimeout: const Duration(seconds: 5), // 设置衔接超时时刻为 5 秒
receiveTimeout: const Duration(seconds: 3), // 设置接纳超时时刻为 3 秒
headers: {
'User-Agent': 'Dio', // 设置恳求头信息
},
);
static Dio dio = Dio(options);
static Future<T> request<T>(String url,
{String method = "get", Map<String, dynamic>? params}) async {
// 1恳求的独自装备
final options = Options(method: method);
// 2 增加一个拦截器
Interceptor inter = InterceptorsWrapper(
onRequest: (options, handler) {
return handler.next(options);
},
onResponse: (e, handler) {
print(e);
return handler.next(e);
},
onError: (e, handler) {
print(e);
return handler.next(e);
},
);
List<Interceptor> inters = [];
inters.add(CustomInterceptor()); //增加自界说拦截器
inters.add(LogInterceptor()); //增加内置拦截器
dio.interceptors.addAll(inters);
// 3 建议网络恳求
try {
Response response =
await dio.request<T>(url, queryParameters: params, options: options);
print("测试");
print(url);
return response.data;
} catch (e) {
print(e);
return Future.error(e);
}
}
}
调用恳求
把封装好的文件导入进来,
import 'package:flutter/material.dart';
import 'utils/http.dart';
class MyNetwork extends StatefulWidget {
const MyNetwork({super.key});
@override
State<MyNetwork> createState() => _MyNetworkState();
}
class _MyNetworkState extends State<MyNetwork> {
void getData() async {
print("建议恳求");
var responseData = await HttpApi.request('book');
print(responseData);
}
@override
Widget build(BuildContext context) {
return Container(
child: Column(children: [
ElevatedButton(
onPressed: () {
getData();
},
child: const Text("建议恳求"))
]));
}
}
在 utils/http.dart
文件中,咱们封装了 dio
,创建了dio
示例,传入了默认装备项,而且绑定了拦截器,在建议恳求时,也会走恳求拦截器,看参数是否合法,后会进入呼应拦截器,状况码是否对以及不同状况码回来不同内容,最后将回来成果数据抛给客户端呼应。
在utils/http.dart
文件中, 有一个 request
异步 静态(static)方法,它供给了恳求时需求填的必填参数和可选参数,当咱们使用时,能够通过 类名.方法名
即可调用建议恳求了。
恳求回来内容
最后
❤️关注+点赞+收藏+评论+转发❤️,原创不易,鼓舞笔者创造更好的文章