flutter_dev_console 1.0.1
flutter_dev_console: ^1.0.1 copied to clipboard
A lightweight Flutter dev console for viewing API requests, logs, and analytics events in real time.
DevConsole 开发控制台插件 #
DevConsole 是一个用于 Flutter 应用的开发调试工具,提供日志管理、接口请求监听和埋点事件查看功能。这个插件可以帮助开发者在开发和测试阶段更有效地调试应用。
功能特点 #
- 日志管理:查看应用日志,支持不同级别(调试、信息、警告、错误),显示堆栈信息
- 接口监听:监控所有网络请求,查看请求和响应详情,包括请求耗时统计
- 埋点事件:查看埋点事件队列和历史记录
安装 #
将以下内容添加到你的 pubspec.yaml
文件中:
dependencies:
dev_console: ^0.1.0
或者,如果你想使用本地路径:
dependencies:
dev_console:
path: ../path/to/dev_console
然后运行:
flutter pub get
使用方法 #
1. 初始化 #
在应用启动时初始化 DevConsole:
import 'package:dev_console/dev_console.dart';
void main() {
// 初始化开发控制台
DevConsole.instance.initialize();
runApp(MyApp());
}
2. 记录 API 请求 #
你可以使用 ApiLogger 记录网络请求,适用于任何 HTTP 客户端:
import 'package:dev_console/dev_console.dart';
void setupApiLogging() {
final apiLogger = DevConsole.instance.getApiLogger();
// 在你的网络请求代码中添加以下记录
// 1. 记录请求开始
apiLogger.logRequest(
'https://api.example.com/users',
'GET',
headers: {'Authorization': 'Bearer token123'},
data: {'param': 'value'},
queryParameters: {'page': '1'},
);
// 2. 记录请求成功
apiLogger.logResponse(
'https://api.example.com/users',
'GET',
200,
{'id': 1, 'name': 'Test User'},
headers: {'Content-Type': 'application/json'},
data: {'param': 'value'},
queryParameters: {'page': '1'},
);
// 3. 记录请求失败
apiLogger.logError(
'https://api.example.com/invalid',
'GET',
'404 Not Found',
statusCode: 404,
headers: {'Authorization': 'Bearer token123'},
data: null,
queryParameters: {},
);
}
适配不同 HTTP 客户端
以下是在几种常见 HTTP 客户端中集成 ApiLogger 的示例:
http 包
import 'package:http/http.dart' as http;
import 'package:dev_console/dev_console.dart';
Future<void> makeRequest() async {
final apiLogger = DevConsole.instance.getApiLogger();
final url = Uri.parse('https://api.example.com/users');
final headers = {'Authorization': 'Bearer token123'};
// 记录请求
apiLogger.logRequest(
url.toString(),
'GET',
headers: headers,
);
try {
final response = await http.get(url, headers: headers);
// 记录响应
apiLogger.logResponse(
url.toString(),
'GET',
response.statusCode,
response.body,
headers: headers,
);
} catch (error) {
// 记录错误
apiLogger.logError(
url.toString(),
'GET',
error.toString(),
headers: headers,
);
}
}
Dio 包
import 'package:dio/dio.dart';
import 'package:dev_console/dev_console.dart';
Future<void> setupDio() async {
final dio = Dio();
final apiLogger = DevConsole.instance.getApiLogger();
// 添加拦截器
dio.interceptors.add(InterceptorsWrapper(
onRequest: (options, handler) {
// 请求前记录
apiLogger.logRequest(
options.uri.toString(),
options.method,
headers: options.headers,
data: options.data,
queryParameters: options.queryParameters,
);
return handler.next(options);
},
onResponse: (response, handler) {
// 请求成功记录
apiLogger.logResponse(
response.requestOptions.uri.toString(),
response.requestOptions.method,
response.statusCode,
response.data,
headers: response.headers.map,
data: response.requestOptions.data,
queryParameters: response.requestOptions.queryParameters,
);
return handler.next(response);
},
onError: (error, handler) {
// 请求失败记录
apiLogger.logError(
error.requestOptions.uri.toString(),
error.requestOptions.method,
error.toString(),
statusCode: error.response?.statusCode,
headers: error.requestOptions.headers,
data: error.requestOptions.data,
queryParameters: error.requestOptions.queryParameters,
);
return handler.next(error);
},
));
}
3. 显示控制台 #
在需要时显示开发控制台:
ElevatedButton(
onPressed: () {
DevConsole.instance.show(context);
},
child: Text('显示开发控制台'),
)
或者添加一个悬浮按钮:
FloatingActionButton(
onPressed: () {
DevConsole.instance.show(context);
},
child: Icon(Icons.developer_mode),
tooltip: '开发控制台',
)
4. 记录日志 #
使用 DevConsole 记录日志:
// 记录普通日志
DevConsole.instance.log('这是一条信息日志', level: LogLevel.info, tag: 'MyTag');
// 记录调试日志
DevConsole.instance.log('这是一条调试日志', level: LogLevel.debug, tag: 'Debug');
// 记录警告日志
DevConsole.instance.log('这是一条警告日志', level: LogLevel.warning, tag: 'Warning');
// 记录带有堆栈信息的错误日志
try {
// 可能抛出异常的代码
throw Exception('发生错误');
} catch (e, stack) {
DevConsole.instance.log(
'发生异常: $e',
level: LogLevel.error,
tag: 'Error',
stackTrace: stack,
error: e
);
}
5. 快捷 API 记录方法 #
你可以使用 DevConsole 的简便方法快速记录 API 请求:
// 记录成功的请求
DevConsole.instance.logApiRequest(
'https://api.example.com/users',
'GET',
headers: {'Authorization': 'Bearer token123'},
response: {'id': 1, 'name': 'Test User'},
statusCode: 200,
);
// 记录失败的请求
DevConsole.instance.logApiRequest(
'https://api.example.com/invalid',
'GET',
error: '404 Not Found',
statusCode: 404,
status: RequestStatus.failed,
);
6. 记录埋点事件 #
使用DevConsole记录和跟踪埋点事件:
// 记录待上传的埋点事件
String eventId = DateTime.now().millisecondsSinceEpoch.toString();
DevConsole.instance.trackEvent(
'页面浏览',
parameters: {'page_name': '首页'},
category: '页面',
status: EventStatus.pending, // 默认为pending状态
);
// 上传成功后更新状态
DevConsole.instance.updateEventStatus(eventId, EventStatus.success);
// 上传失败后更新状态
DevConsole.instance.updateEventStatus(
eventId,
EventStatus.failed,
errorMessage: '网络连接超时',
);
配置选项 #
你可以在初始化时配置 DevConsole:
DevConsole.instance.initialize(
maxLogCount: 500, // 最大日志数量
maxRequestCount: 100, // 最大请求记录数量
enableInRelease: false, // 是否在发布版本中启用
);
在发布版本中禁用 #
建议在发布版本中禁用 DevConsole,可以使用以下方式:
void main() {
// 仅在调试模式下初始化
if (kDebugMode) {
DevConsole.instance.initialize();
}
runApp(MyApp());
}
自定义主题 #
你可以自定义控制台的主题:
DevConsole.instance.initialize(
theme: DevConsoleTheme(
primaryColor: Colors.blue,
backgroundColor: Colors.grey[900],
textColor: Colors.white,
),
);
注意事项 #
- 此插件仅用于开发和测试环境,不建议在生产环境中使用
- 日志和请求记录存储在内存中,应用重启后会清空
- 可以与任何HTTP客户端库集成,不限于特定的网络请求框架
贡献 #
欢迎提交 Issues 和 Pull Requests!
许可证 #
MIT