Flutter日志管理插件loggycian_flutter的使用
Flutter日志管理插件loggycian_flutter的使用
Loggycian Flutter 是一个强大的日志管理和调试工具包,适用于Flutter应用程序。目前它支持网络日志记录功能,并且还计划添加导航日志记录、分析事件跟踪和性能指标等功能。
特性 🚀
-
📊 网络日志记录
- 实时查看HTTP请求和响应
- 支持Dio、HTTP包和GraphQL
- 过滤和搜索功能
- 复制请求/响应数据和cURL命令
-
🔜 即将推出
- 导航日志记录
- 分析事件跟踪
- 性能指标
- 状态管理调试
安装 💻
要开始使用Loggycian Flutter,必须在您的机器上安装Flutter SDK。
通过以下命令安装:
dart pub add loggycian_flutter
基本用法 📱
- 将您的应用包裹在
Loggycian
中:
void main() {
runApp(
Loggycian(
app: MyApp(),
visible: !kReleaseMode, // 可选:仅在调试模式下显示
),
);
}
- 向您的HTTP客户端添加拦截器:
// 对于Dio
final dio = Dio()..interceptors.add(DioInterceptor());
// 对于HTTP包
final client = HttpInterceptor(http.Client());
// 对于GraphQL
final link = GqlInterceptor(HttpLink('YOUR_GRAPHQL_ENDPOINT'));
- 完成!调试按钮将出现在屏幕上。点击它以查看日志。
示例代码
以下是使用Loggycian Flutter的基本示例代码:
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:graphql_flutter/graphql_flutter.dart' as gqlflutter;
import 'package:http/http.dart' as http;
import 'package:loggycian_flutter/loggycian_flutter.dart';
/// 示例展示如何集成Loggycian与多个HTTP客户端。
///
/// 此示例演示了如何:
/// 1. 使用Loggycian设置Flutter
/// 2. 集成Dio、HTTP和GraphQL客户端
/// 3. 处理多个并发API调用
/// 4. 实现网络日志的最佳实践
/// API端点配置
class ApiConfig {
static const String baseUrl = 'https://jsonplaceholder.typicode.com';
static const String graphqlUrl = 'https://countries.trevorblades.com/';
static const String postsEndpoint = '/posts';
}
/// 展示最佳实践的API服务实现
///
/// 主要特性:
/// * Dio集成 [DioInterceptor]
/// * HTTP客户端 [HttpInterceptor]
/// * GraphQL客户端 [GqlInterceptor]
/// 使用方法:
/// ```dart
/// final apiService = ApiService();
/// final results = await apiService.fetchAllData();
/// ```
class ApiService {
final Dio _dio;
final http.Client _httpClient;
final gqlflutter.GraphQLClient _graphQLClient;
/// 创建具有适当配置拦截器的 [ApiService]。
///
/// 每个客户端都使用相应的Loggycian拦截器初始化:
/// - Dio使用 [DioInterceptor]
/// - HTTP客户端使用 [HttpInterceptor]
/// - GraphQL客户端使用 [GqlInterceptor]
ApiService()
: _dio = Dio()..interceptors.add(DioInterceptor()),
_httpClient = HttpInterceptor(http.Client()),
_graphQLClient = gqlflutter.GraphQLClient(
cache: gqlflutter.GraphQLCache(),
link: GqlInterceptor(gqlflutter.HttpLink(ApiConfig.graphqlUrl)),
);
Future<List<String>> fetchAllData() async {
final List<dynamic> responses = await Future.wait([
_fetchDioPosts(),
_fetchHttpPosts(),
_fetchGraphQLCountries(),
]);
final List<String> dioPosts = responses[0] as List<String>;
final List<String> httpPosts = responses[1] as List<String>;
final String graphqlResponse = responses[2] as String;
return [...dioPosts, ...httpPosts, graphqlResponse];
}
Future<List<String>> _fetchDioPosts() async {
List<Future<Response>> futures = List.generate(
4,
(i) => _dio.get('${ApiConfig.baseUrl}${ApiConfig.postsEndpoint}/${i + 1}'),
);
final responses = await Future.wait(futures);
return responses.map((response) => response.data.toString()).toList();
}
Future<List<String>> _fetchHttpPosts() async {
List<Future<http.Response>> futures = List.generate(
4,
(i) => _httpClient.get(
Uri.parse('${ApiConfig.baseUrl}${ApiConfig.postsEndpoint}/${i + 1}'),
),
);
final responses = await Future.wait(futures);
return responses.map((response) => response.body).toList();
}
Future<String> _fetchGraphQLCountries() async {
final options = gqlflutter.QueryOptions(
document: gqlflutter.gql("""
query GetCountries {
countries {
code
name
}
}
"""),
fetchPolicy: gqlflutter.FetchPolicy.noCache,
cacheRereadPolicy: gqlflutter.CacheRereadPolicy.ignoreAll,
);
final result = await _graphQLClient.query(options);
return result.data.toString();
}
}
/// 示例Flutter应用展示Loggycian集成
///
/// 此应用展示了:
/// 1. 使用 [Loggycian] 设置正确的Widget树
/// 2. 使用不同HTTP客户端的实际世界API调用
/// 3. 网络日志可视化
void main() {
runApp(const MainApp());
}
/// Loggycian的Navigator键
final GlobalKey<NavigatorState> navigatorKey = GlobalKey<NavigatorState>();
class MainApp extends StatelessWidget {
const MainApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Loggycian(app: Scaffold(body: Center(child: ApiCaller()))),
);
}
}
class ApiCaller extends StatefulWidget {
const ApiCaller({super.key});
[@override](/user/override)
State<StatefulWidget> createState() => _ApiCallerState();
}
class _ApiCallerState extends State<ApiCaller> {
final ApiService _apiService = ApiService();
late Future<List<String>> _apiFuture;
[@override](/user/override)
void initState() {
super.initState();
_apiFuture = _apiService.fetchAllData();
}
void _refreshApis() {
setState(() {
_apiFuture = _apiService.fetchAllData();
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
body: FutureBuilder<List<String>>(
future: _apiFuture,
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return const Center(child: CircularProgressIndicator());
} else if (snapshot.hasError) {
return Text('Error: ${snapshot.error}');
} else if (!snapshot.hasData || snapshot.data!.isEmpty) {
return const Text('No data found');
} else {
return ListView.builder(
itemCount: snapshot.data!.length,
itemBuilder: (context, index) {
return ListTile(title: Text(snapshot.data![index]));
},
);
}
},
),
floatingActionButton: FloatingActionButton(
onPressed: _refreshApis,
child: const Icon(Icons.refresh),
),
);
}
}
更多关于Flutter日志管理插件loggycian_flutter的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter日志管理插件loggycian_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
loggycian_flutter
是一个用于 Flutter 应用的日志管理插件,它基于 loggy
库,提供了更加灵活和强大的日志记录功能。使用 loggycian_flutter
,你可以轻松地配置日志级别、日志输出方式以及日志的格式化等。
以下是使用 loggycian_flutter
的基本步骤:
1. 添加依赖
首先,在 pubspec.yaml
文件中添加 loggycian_flutter
依赖:
dependencies:
flutter:
sdk: flutter
loggycian_flutter: ^1.0.0 # 请检查最新版本
然后运行 flutter pub get
来安装依赖。
2. 初始化 Loggy
在 main.dart
中初始化 loggy
:
import 'package:flutter/material.dart';
import 'package:loggy/loggy.dart';
import 'package:loggycian_flutter/loggycian_flutter.dart';
void main() {
// 初始化 Loggy
Loggy.initLoggy(
logPrinter: const PrettyPrinter(), // 使用 PrettyPrinter 格式化日志
logOptions: LogOptions(LogLevel.all), // 设置日志级别
);
runApp(MyApp());
}
3. 使用 Loggy 记录日志
在你的代码中使用 Loggy
来记录日志:
import 'package:flutter/material.dart';
import 'package:loggy/loggy.dart';
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
// 记录不同级别的日志
Loggy.instance.info('This is an info message');
Loggy.instance.warning('This is a warning message');
Loggy.instance.error('This is an error message');
Loggy.instance.debug('This is a debug message');
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Loggycian Flutter Demo'),
),
body: Center(
child: Text('Check your logs!'),
),
);
}
}
4. 配置日志输出方式
你可以通过配置 Loggy
来控制日志的输出方式。例如,你可以将日志输出到控制台、文件或其他地方。
Loggy.initLoggy(
logPrinter: const PrettyPrinter(),
logOptions: LogOptions(LogLevel.all),
// 添加自定义的日志处理器
handlers: [
ConsoleHandler(), // 控制台输出
// FileHandler(), // 文件输出(需要额外配置)
],
);
5. 自定义日志格式化
你可以通过实现自己的 LogPrinter
来定制日志的格式化方式:
class CustomPrinter extends LogPrinter {
const CustomPrinter();
@override
void onLog(LogRecord record) {
// 自定义日志格式
print('${record.level.name}: ${record.message}');
}
}
// 使用自定义的 LogPrinter
Loggy.initLoggy(
logPrinter: const CustomPrinter(),
logOptions: LogOptions(LogLevel.all),
);
6. 日志级别控制
你可以通过 LogOptions
来控制日志的级别,例如只记录 info
及以上级别的日志:
Loggy.initLoggy(
logPrinter: const PrettyPrinter(),
logOptions: LogOptions(LogLevel.info), // 只记录 info 及以上级别的日志
);
7. 日志上下文
你还可以为日志添加上下文信息,方便调试和追踪:
Loggy.instance.info('This is an info message', context: 'MyApp');