Flutter日志管理插件diox_log的使用
Flutter日志管理插件diox_log的使用
diox_log
是一个为 Dart 编程语言设计的 HTTP 检查器工具,主要用于调试 HTTP 请求。目前它实现了基于 dio
的 HTTP 捕获功能。当然,你可以通过自己实现 Interceptor
来替代 DiologInterceptor
,以适配其他 HTTP 客户端。
添加依赖
首先,在你的 pubspec.yaml
文件中添加 diox_log
依赖:
dependencies:
diox_log : ^3.0.2
在dio中设置拦截器
接下来,在你的 dio
实例中添加 DioLogInterceptor
拦截器:
import 'package:dio/dio.dart';
import 'package:diox_log/dio_log_interceptor.dart';
void initHttp() {
var dio = Dio();
dio.interceptors.add(DioLogInterceptor());
}
在主页面添加悬浮按钮
为了方便查看日志,可以在主页面添加一个悬浮按钮,点击后可以跳转到日志列表界面:
import 'package:flutter/material.dart';
import 'package:diox_log/diox_log.dart';
void showDebugBtn(BuildContext context, {Color btnColor = Colors.blue}) {
// 显示悬浮按钮
}
void dismissDebugBtn() {
// 取消悬浮按钮
}
bool debugBtnIsShow() {
// 返回悬浮按钮展示状态
return true; // 示例返回值
}
如果你希望在特定位置打开日志列表,可以使用 Navigator
:
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => HttpLogListWidget(),
),
);
其他可配置参数
你还可以配置一些其他的参数来调整日志管理的行为,例如设置最大日志条数,定义哪些请求应被视为错误,以及是否禁用日志打印等:
/// 设置记录日志的最大条数
LogPoolManager.getInstance().maxCount = 100;
/// 添加自定义的日志错误判断逻辑
LogPoolManager.getInstance().isError = (res) => res.resOptions == null;
/// 禁用日志打印
DioLogInterceptor.enablePrintLog = false;
截图
以下是 diox_log
的截图展示:
gif演示
示例代码
以下是一个完整的示例代码,展示了如何在 Flutter 应用中使用 diox_log
插件:
import 'package:flutter/material.dart';
import 'package:dio/dio.dart';
import 'package:diox_log/dio_log_interceptor.dart';
import 'package:diox_log/http_log_list_widget.dart';
void main() {
initHttp();
runApp(MyApp());
}
void initHttp() {
var dio = Dio();
dio.interceptors.add(DioLogInterceptor());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Demo of diox_log',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'Demo of diox_log'),
);
}
}
class MyHomePage extends StatefulWidget {
final String title;
MyHomePage({required this.title});
[@override](/user/override)
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
void _navigateToLogList() {
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => HttpLogListWidget(),
),
);
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: ElevatedButton(
onPressed: _navigateToLogList,
child: Text('查看日志'),
),
),
);
}
}
更多关于Flutter日志管理插件diox_log的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter日志管理插件diox_log的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
diox_log
是一个用于 Flutter 应用的日志管理插件,它基于 dio
网络库,提供了一个简单而强大的日志记录功能。dio
是一个强大的 Dart HTTP 客户端,而 diox_log
则是 dio
的一个日志拦截器,用于记录 HTTP 请求和响应的详细信息。
安装 diox_log
首先,你需要在 pubspec.yaml
文件中添加 diox_log
依赖:
dependencies:
dio: ^5.0.0
diox_log: ^1.0.0
然后,运行 flutter pub get
来安装依赖。
使用 diox_log
- 初始化
Dio
并添加DioxLogInterceptor
import 'package:dio/dio.dart';
import 'package:diox_log/diox_log.dart';
void main() {
Dio dio = Dio();
// 添加 DioxLogInterceptor 到 Dio 实例中
dio.interceptors.add(DioxLogInterceptor());
// 发送一个 GET 请求
dio.get('https://jsonplaceholder.typicode.com/posts/1').then((response) {
print(response.data);
}).catchError((error) {
print(error);
});
}
- 配置
DioxLogInterceptor
DioxLogInterceptor
提供了一些配置选项,可以根据需要进行自定义:
dio.interceptors.add(DioxLogInterceptor(
request: true, // 是否记录请求日志,默认为 true
requestHeader: true, // 是否记录请求头,默认为 true
requestBody: true, // 是否记录请求体,默认为 true
responseHeader: true, // 是否记录响应头,默认为 true
responseBody: true, // 是否记录响应体,默认为 true
error: true, // 是否记录错误日志,默认为 true
logPrint: (Object object) {
// 自定义日志输出方式
print(object);
},
));
- 日志输出示例
当你发送一个请求时,diox_log
会输出类似以下的日志:
*** Request ***
uri: https://jsonplaceholder.typicode.com/posts/1
method: GET
headers: {content-type: application/json; charset=utf-8}
data: null
*** Response ***
uri: https://jsonplaceholder.typicode.com/posts/1
statusCode: 200
headers: {content-type: application/json; charset=utf-8}
data: {
"userId": 1,
"id": 1,
"title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
"body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
}
自定义日志输出
你可以通过 logPrint
参数来自定义日志的输出方式,例如将日志写入文件或发送到远程服务器。
dio.interceptors.add(DioxLogInterceptor(
logPrint: (Object object) {
// 将日志写入文件
final file = File('log.txt');
file.writeAsStringSync('$object\n', mode: FileMode.append);
},
));