Flutter网络请求格式化插件dio_http_formatter的使用
Flutter网络请求格式化插件dio_http_formatter的使用
简介
dio_http_formatter
是一个简单的 Dio 拦截器,用于在控制台中以漂亮的格式打印 HTTP 请求和响应,以便更容易调试和分享。它支持多种内容类型的漂亮打印,如 application/json
、application/x-www-form-urlencoded
和 text/html
。
快速开始
安装包
- 在您的项目中安装
dio_http_formatter
:
或者如果不是Flutter项目:flutter pub get dio_http_formatter
pub get dio_http_formatter
添加拦截器
- 将拦截器添加到您的 Dio 实例中:
final _dio = Dio(); _dio.interceptors.add(HttpFormatter());
Dio 版本映射表
根据您使用的 Dio 版本,选择相应的 dio_http_formatter
版本:
Dio Version | Package Version |
---|---|
4.x.x | 2.x.x |
5.x.x | 3.x.x |
配置选项
以下是可选参数,用于自定义要打印的内容以及如何打印 HTTP 请求和响应:
Property | Type | Default Value |
---|---|---|
includeRequest | bool | true |
includeRequestHeaders | bool | true |
includeRequestQueryParams | bool | true |
includeRequestBody | bool | true |
includeResponse | bool | true |
includeResponseHeaders | bool | true |
includeResponseBody | bool | true |
logger | Logger | PrettyPrinter() |
loggingFilter | LoggingFilter | null |
日志过滤器
HttpFormatter
支持通过 loggingFilter
来过滤是否记录请求/响应。例如,不记录返回状态码为 201 的请求/响应:
final dio = Dio();
dio.interceptors.add(
HttpFormatter(
loggingFilter: (request, response, error) {
if (response?.statusCode == 201) {
return false;
}
return true;
},
),
);
警告:
httpLoggerFilter
已被弃用,请迁移到新的loggingFilter
。httpLoggerFilter
将在下一个主要版本中移除。
示例代码
POST 请求 [application/json]
await _dio.post(
'https://postman-echo.com/post',
data: {'foo': 'foo'},
options: Options()
..headers = {
'my-custom-header': 'my-custom-header',
'content-type': 'application/json'
},
);
POST 请求 [multipart/form-data]
await dio.post(
"https://postman-echo.com/post",
data: FormData.fromMap({
"foo": "foo",
"bar": MultipartFile.fromBytes([1, 2, 3, 4, 5, 6])
}),
);
POST 请求 [application/x-www-form-urlencoded]
await dio.post(
"https://postman-echo.com/post",
data: {
"foo": "foo",
"bar": "bar",
},
options: Options(contentType: Headers.formUrlEncodedContentType),
);
成功的 GET 请求 [text/html]
await _dio.get('https://example.org');
带查询参数的 GET 请求 [text/html]
await _dio.get(
'https://example.com',
queryParameters: {'limit_start': 0, 'search_term': 'dart'},
);
完整示例代码
import 'package:dio/dio.dart';
import 'package:dio_http_formatter/dio_http_formatter.dart';
void main() async {
final _dio = Dio();
// 添加拦截器
_dio.interceptors.add(
HttpFormatter(
includeRequest: true,
includeRequestHeaders: true,
includeRequestQueryParams: true,
includeRequestBody: true,
includeResponse: true,
includeResponseHeaders: true,
includeResponseBody: true,
loggingFilter: (request, response, error) {
// 不记录返回状态码为 201 的请求/响应
if (response?.statusCode == 201) {
return false;
}
return true;
},
),
);
// 发送GET请求
await _dio.get('https://example.com', queryParameters: {'limit_start': 0, 'search_term': 'dart'});
// 发送POST请求
await _dio.post(
'https://postman-echo.com/post',
data: {'foo': 'foo'},
options: Options()
..headers = {
'my-custom-header': 'my-custom-header',
'content-type': 'application/json'
},
);
}
以上是 dio_http_formatter
插件的详细使用说明及示例代码,希望对您有所帮助!
更多关于Flutter网络请求格式化插件dio_http_formatter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter网络请求格式化插件dio_http_formatter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter项目中使用dio_http_formatter
插件来格式化网络请求和响应的示例。dio_http_formatter
是一个非常有用的插件,它可以帮助你更好地调试和阅读网络请求和响应的内容。
首先,确保你已经在你的pubspec.yaml
文件中添加了dio
和dio_http_formatter
依赖项:
dependencies:
flutter:
sdk: flutter
dio: ^4.0.0 # 确保使用最新版本
dio_http_formatter: ^1.0.0 # 确保使用最新版本
然后,运行flutter pub get
来安装这些依赖项。
接下来,你可以在你的Flutter项目中使用这些库。以下是一个完整的示例,展示了如何使用dio
进行网络请求,并使用dio_http_formatter
来格式化请求和响应:
import 'package:flutter/material.dart';
import 'package:dio/dio.dart';
import 'package:dio_http_formatter/dio_http_formatter.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Dio HTTP Formatter Example'),
),
body: Center(
child: MyHomePage(),
),
),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
String responseData = '';
@override
void initState() {
super.initState();
makeNetworkRequest();
}
void makeNetworkRequest() async {
// 创建 Dio 实例
final dio = Dio();
// 添加拦截器以格式化请求和响应
dio.interceptors.add(
InterceptorsWrapper(
onRequest: (options, handler) {
// 打印格式化后的请求
print(RequestOptionsFormatter(options).format());
return handler.next(options);
},
onResponse: (response, handler) {
// 打印格式化后的响应
print(ResponseFormatter(response).format());
// 更新 UI
setState(() {
responseData = response.data.toString();
});
return handler.next(response);
},
onError: (err, handler) {
// 打印错误(如果需要格式化错误,可以添加相应的格式化逻辑)
print(err.response?.data ?? err.message);
return handler.next(err);
},
),
);
// 发起网络请求
try {
await dio.get('https://jsonplaceholder.typicode.com/posts/1');
} catch (e) {
print(e);
}
}
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('Network Response:'),
Text(responseData),
],
);
}
}
在这个示例中,我们创建了一个简单的Flutter应用,它包含一个按钮(虽然在这个例子中按钮是隐式的,因为我们在initState
中直接发起了请求)。我们使用dio
库来发起网络请求,并使用dio_http_formatter
库来格式化并打印请求和响应的内容。
注意,这个示例中的RequestOptionsFormatter
和ResponseFormatter
是dio_http_formatter
提供的类,它们负责将请求和响应格式化为更易读的字符串。
确保在实际应用中处理错误和异常,并根据需要调整UI更新逻辑。这个示例主要是为了展示如何使用dio_http_formatter
来格式化网络请求和响应。