Flutter日志记录插件logarte的使用
Flutter日志记录插件logarte的使用
logarte
是一个用于Flutter应用的调试控制台和日志记录工具,可以在应用运行时监控其状态。以下是关于如何使用 logarte
的详细说明。
📦 特性
- 图形化控制台:一个漂亮的图形化控制台,便于调试。
- 密码保护:为图形化控制台添加密码保护。
- 网络请求监控:查看网络请求、响应、状态码和大小。
- 数据库写入监控:查看数据库写入事务及其内容。
- 分享日志:通过平台分享窗口分享各种日志。
📱 截图
🪚 安装
在 pubspec.yaml
文件中添加 logarte
作为依赖项:
dependencies:
logarte: ^latest_version
然后在终端中运行 flutter pub get
来安装该包。
🚀 使用方法
初始化
你需要在整个应用程序中有一个 Logarte
实例。我建议将 Logarte
的全局实例存储在一个单独的文件中。
final Logarte logarte = Logarte(
// 控制台的密码
password: '1234',
// 是否忽略密码
ignorePassword: !kReleaseMode,
// 分享网络请求日志的方法
onShare: (String message) {
Share.share(message);
},
// 火箭按钮长按执行的操作
onRocketLongPressed: (BuildContext context) {
print('Rocket long pressed');
},
// 火箭按钮双击执行的操作
onRocketDoubleTapped: (BuildContext context) {
print('Rocket double tapped');
},
);
打开控制台
可以通过两种方式打开 Logarte
控制台:点击火箭入口按钮或使用 LogarteMagicalTap
(当点击10次时会打开控制台)。
火箭入口按钮
这是一个浮动按钮,可以用来从应用程序的任何地方打开控制台。只需将其附加到UI上即可。
@override
void initState() {
super.initState();
logarte.attach(
context: context,
visible: !kReleaseMode,
);
}
LogarteMagicalTap
LogarteMagicalTap
是一个小部件,当点击10次时会附加上火箭入口按钮。
LogarteMagicalTap(
logarte: logarte,
child: Text(
'LibroKit v2.2',
),
)
跟踪网络请求
你可以通过使用 LogarteDioInterceptor
(对于 Dio
)或其他自定义方法来跟踪网络请求。
Dio
_dio = Dio()
..interceptors.add(
LogarteDioInterceptor(logarte),
);
其他客户端
import 'package:http/http.dart' as http;
final body = {
'name': 'Kamran',
'age': 22,
};
final headers = {
'Content-Type': 'application/json',
};
final endpoint = 'https://api.example.com';
final response = await http.post(
Uri.parse(endpoint),
headers: headers,
body: jsonEncode(body),
);
logarte.network(
request: NetworkRequestLogarteEntry(
method: 'POST',
url: endpoint,
headers: headers,
body: body,
),
response: NetworkResponseLogarteEntry(
statusCode: response.statusCode,
headers: response.headers,
body: response.body,
),
);
记录消息
你可以使用 Logarte
实例的 info
方法记录消息,并在图形化控制台中查看它们。
logarte.info('This is an info message');
跟踪导航路由
要跟踪导航路由,可以将 LogarteNavigatorObserver
添加到 MaterialApp
的 navigatorObservers
列表中。
MaterialApp(
navigatorObservers: [
LogarteNavigatorObserver(logarte),
],
)
跟踪数据库写入
要跟踪数据库写入,可以使用 Logarte
实例的 database
方法。
logarte.database(
target: 'language',
value: 'en',
source: 'SharedPreferences',
);
🕹️ 示例代码
以下是一个更详细的示例,展示了如何在项目中使用 logarte
:
import 'package:dio/dio.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:logarte/logarte.dart';
import 'package:share_plus/share_plus.dart';
final logarte = Logarte(
onShare: Share.share,
password: 'logarte',
);
enum Environment { dev, staging, prod }
const environment = Environment.dev;
void main() {
runApp(const App());
}
class App extends StatelessWidget {
const App({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Logarte Example',
debugShowCheckedModeBanner: false,
themeMode: ThemeMode.dark,
darkTheme: ThemeData(
useMaterial3: true,
brightness: Brightness.dark,
colorSchemeSeed: Colors.blueGrey.shade900,
),
theme: ThemeData(
useMaterial3: true,
colorSchemeSeed: Colors.blueGrey.shade900,
),
navigatorObservers: [
LogarteNavigatorObserver(logarte),
],
home: const HomePage(),
);
}
}
class HomePage extends StatefulWidget {
const HomePage({super.key});
@override
State<HomePage> createState() => HomePageState();
}
class HomePageState extends State<HomePage> {
late final Dio _dio;
@override
void initState() {
super.initState();
_dio = Dio()
..interceptors.add(
LogarteDioInterceptor(logarte),
);
logarte.attach(
context: context,
visible: environment == Environment.dev ||
environment == Environment.staging ||
kDebugMode,
);
}
@override
void dispose() {
_dio.close();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Logarte Example'),
),
body: Column(
children: [
const Divider(),
ButtonBar(
children: [
FilledButton.tonal(
onPressed: () async {
await _dio.get('https://jsonplaceholder.typicode.com/posts');
},
child: const Text('GET'),
),
FilledButton.tonal(
onPressed: () async {
await _dio.post('https://jsonplaceholder.typicode.com/posts');
},
child: const Text('POST'),
),
FilledButton.tonal(
onPressed: () async {
await _dio.put('https://jsonplaceholder.typicode.com/posts');
},
child: const Text('PUT'),
),
FilledButton.tonal(
onPressed: () async {
await _dio.delete('https://jsonplaceholder.typicode.com/posts');
},
child: const Text('DELETE'),
),
],
),
const Divider(),
ButtonBar(
children: [
FilledButton.tonal(
onPressed: () {
logarte.database(
target: 'language',
value: 'en',
source: 'SharedPreferences',
);
},
child: const Text('Write to database'),
),
FilledButton.tonal(
onPressed: () {
showDialog(
context: context,
routeSettings: const RouteSettings(
name: '/test-dialog',
),
builder: (BuildContext context) {
return const AlertDialog(
title: Text('Dialog'),
content: Text(
'Opening of this dialog was logged to Logarte',
),
);
},
);
},
child: const Text('Open dialog'),
),
FilledButton.tonal(
onPressed: () {
try {
throw Exception('Exception');
} catch (e, s) {
logarte.error(e, stackTrace: s);
}
},
child: const Text('Exception'),
),
FilledButton.tonal(
onPressed: () {
// logarte.log('Printed to console');
},
child: const Text('Plain log'),
),
],
),
],
),
);
}
}
希望这些信息对你有所帮助!如果有更多问题,请参考 GitHub 仓库 或加入作者的 Telegram 频道 获取帮助。
更多关于Flutter日志记录插件logarte的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter日志记录插件logarte的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter项目中使用logarte
插件进行日志记录的示例代码。logarte
是一个Flutter插件,用于在应用程序中记录日志,便于调试和监控。需要注意的是,logarte
并不是官方广泛认可的插件,且Flutter社区中可能有多个日志记录插件,例如logger
。不过,为了符合你的要求,这里假设logarte
插件的API类似于常见的日志记录插件。
首先,确保你已经在pubspec.yaml
文件中添加了logarte
依赖项(注意:实际使用时请确认插件的正确名称和版本):
dependencies:
flutter:
sdk: flutter
logarte: ^x.y.z # 替换为实际版本号
然后,运行flutter pub get
来获取依赖项。
接下来,在你的Flutter项目中设置和使用logarte
进行日志记录。以下是一个示例代码:
import 'package:flutter/material.dart';
import 'package:logarte/logarte.dart'; // 假设这是logarte的导入路径
void main() {
// 初始化Logarte
Logarte.init(
level: LogLevel.verbose, // 设置日志级别
printers: [
ConsolePrinter(), // 输出到控制台
// 可以添加其他Printer,如FilePrinter将日志输出到文件
],
);
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Logarte Example'),
),
body: Center(
child: ElevatedButton(
onPressed: _logMessages,
child: Text('Log Messages'),
),
),
),
);
}
void _logMessages() {
Logarte.v('This is a verbose message.');
Logarte.d('This is a debug message.');
Logarte.i('This is an info message.');
Logarte.w('This is a warning message.');
Logarte.e('This is an error message.');
}
}
在这个示例中,我们做了以下几件事:
- 在
pubspec.yaml
文件中添加了logarte
依赖项。 - 在
main.dart
文件中导入了logarte
包。 - 使用
Logarte.init
方法初始化了日志记录器,设置了日志级别,并添加了一个控制台打印机(ConsolePrinter
)。 - 创建了一个简单的Flutter应用,其中包含一个按钮,点击按钮时会记录不同级别的日志消息。
请注意,上面的代码假设logarte
插件提供了LogLevel
枚举和ConsolePrinter
类,以及其他常见的日志记录功能。如果实际插件的API有所不同,请查阅相应的文档并进行相应调整。
由于logarte
可能不是一个广泛认知的插件,如果在实际项目中找不到或无法使用,可以考虑使用其他流行的日志记录插件,如logger
,其使用方式类似,且文档和资源更为丰富。