Flutter颜色观察与日志记录插件color_observer_logger的使用
Flutter颜色观察与日志记录插件color_observer_logger的使用
Color Logger
更多示例可以在这里获取。
与VSCode扩展程序配合使用
-
没有扩展程序时
-
使用扩展程序时可以点击绝对路径跳转到代码行
设置Observer bloc
更多详情可以在这里查看。
// 显示堆栈跟踪
// 如果使用 'flutter build apk --obfuscate'
// 则设置 stackTracking = false;
// AnsiColor.showColor();
Logger.root.level = Level.ALL;
Bloc.observer = ColorBlocObserver(
stackTracking: true,
kIsWeb: kIsWeb,
filter: ShowWhenFilter(
[
"TestLoginBloc",
"TestCubit",
],
),
blocColor: AnsiColor.fg(40),
methodCount: 3,
blocHighLightFilter: DefaultHighLightFilter(
color: AnsiColor.fg(214),
colorOnly: false,
),
);
日志过滤器
- 更多详情可以在这里查看。
- 当字符串包含特定值时触发。
class ShowWhenFilter extends Filter {
ShowWhenFilter(List<String> name) : super(name);
}
class HideWhenFilter extends Filter {
HideWhenFilter(List<String> name) : super(name);
}
高亮过滤器
- 更多详情可以在这里查看。
- 当过滤器返回true时,高亮消息并使用颜色。
class DefaultHighLightFilter extends BlocHighLightFilter {
[@override](/user/override)
bool filter(String message) {
return message.toLowerCase().contains('error') ||
message.toLowerCase().contains('fail') ||
message.toLowerCase().contains('exception');
}
}
bloc
-
不追踪
-
追踪
-
错误
-
错误追踪
cubit
-
不追踪
-
追踪
示例代码
import 'package:color_observer_logger/color_observer_logger.dart';
import 'package:example/bloc/test_bloc.dart';
import 'package:example/bloc/test_cubit.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:logging/logging.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
//AnsiColor.showColor();
Logger.root.level = Level.ALL;
Bloc.observer = ColorBlocObserver(
stackTracking: true,
kIsWeb: kIsWeb,
filter: ShowWhenFilter(
[
"TestLoginBloc",
"TestCubit",
],
),
blocColor: AnsiColor.fg(40),
methodCount: 3,
blocHighLightFilter: DefaultHighLightFilter(
color: AnsiColor.fg(214),
colorOnly: false,
),
);
final testLoginBloc = TestLoginBloc();
final testCubit = TestCubit(0);
return MultiBlocProvider(
providers: [
BlocProvider(
create: (context) => testLoginBloc,
),
BlocProvider(
create: (context) => testCubit,
),
],
child: Builder(builder: (context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const MyHomePage(title: 'Flutter Demo Home Page'),
);
}),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
[@override](/user/override)
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
[@override](/user/override)
Widget build(BuildContext context) {
final testLoginBloc = context.read<TestLoginBloc>();
final testCubit = context.read<TestCubit>();
return Scaffold(
appBar: AppBar(
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: () {
testLoginBloc.add(Success());
testLoginBloc.add(Failed());
},
child: Text("testLoginBloc"),
),
ElevatedButton(
onPressed: () {
List.generate(5, (index) => testCubit.update());
},
child: Text("testCubit"),
),
ElevatedButton(
onPressed: () {
testLoginBloc.add(Error());
testCubit.error();
},
child: Text("error"),
),
],
),
),
);
}
}
更多关于Flutter颜色观察与日志记录插件color_observer_logger的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter颜色观察与日志记录插件color_observer_logger的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用color_observer_logger
插件的一个代码示例。请注意,这个插件是一个假设的插件,因为实际上Flutter社区可能没有这样一个具体命名的插件。不过,我会根据需求模拟一个类似功能的实现,包括颜色观察和日志记录。
首先,我们需要假设有一个color_observer_logger
插件,它可以观察Widget树中的颜色变化并记录日志。由于这个插件不存在,我们将通过创建一个自定义的Widget和日志记录系统来模拟这个功能。
1. 创建自定义ColorObserverLogger
我们可以创建一个自定义的ColorObserverLogger
类,用于观察和记录颜色变化。
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'dart:developer' as developer;
class ColorObserverLogger extends StatefulWidget {
final Widget child;
ColorObserverLogger({required this.child});
@override
_ColorObserverLoggerState createState() => _ColorObserverLoggerState();
}
class _ColorObserverLoggerState extends State<ColorObserverLogger> {
Color? _previousColor;
void _logColorChange(Color newColor) {
if (_previousColor != null && _previousColor != newColor) {
developer.log('Color changed from $_previousColor to $newColor');
}
_previousColor = newColor;
}
@override
Widget build(BuildContext context) {
return LayoutBuilder(
builder: (context, constraints) {
final renderBox = context.findRenderObject() as RenderBox?;
final color = _extractColorFromRenderBox(renderBox);
_logColorChange(color ?? Colors.transparent);
return widget.child;
},
);
}
Color? _extractColorFromRenderBox(RenderBox? renderBox) {
// 这是一个简化的示例,实际上你可能需要更复杂的逻辑来从RenderBox中提取颜色。
// 这里我们假设RenderBox有一个特定的颜色属性(这在实际中是不存在的)。
// 实际情况中,你可能需要遍历RenderBox的子树或使用其他方法来获取颜色。
return null; // 替换为实际的颜色提取逻辑
}
}
2. 使用ColorObserverLogger
接下来,我们可以在我们的Flutter应用中使用这个ColorObserverLogger
来观察Widget树中的颜色变化。
import 'package:flutter/material.dart';
import 'color_observer_logger.dart'; // 假设我们的自定义类在这个文件中
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Color Observer Logger Demo'),
),
body: Center(
child: ColorObserverLogger(
child: Container(
width: 100,
height: 100,
color: Colors.blue, // 这里我们改变颜色来触发日志记录
),
),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
// 动态改变颜色以演示日志记录
setState(() {
// 这里我们假设有一个机制来动态改变Container的颜色
// 在实际应用中,这可能会涉及到状态管理或其他逻辑
});
},
tooltip: 'Change Color',
child: Icon(Icons.color_lens),
),
),
);
}
}
注意
-
颜色提取:上面的
_extractColorFromRenderBox
方法是一个占位符。在实际应用中,从RenderBox中提取颜色可能涉及更复杂的逻辑,甚至可能需要自定义RenderObject或使用其他技术。 -
动态颜色改变:在上面的示例中,
FloatingActionButton
的onPressed
回调只是一个占位符。在实际应用中,你需要实现一个机制来动态改变Widget的颜色。 -
日志记录:上面的示例使用
developer.log
来进行日志记录。这是Flutter提供的一个简单的日志记录机制。根据你的需求,你可能希望使用更复杂的日志记录系统,比如将日志发送到远程服务器或使用第三方日志库。
由于color_observer_logger
插件是一个假设的插件,上面的代码提供了一个自定义的解决方案来模拟所需的功能。如果你找到一个具体的插件,它的用法可能会有所不同,但上面的代码提供了一个很好的起点,展示了如何在Flutter中实现类似的功能。