flutter_debug_tools 2.0.0
flutter_debug_tools: ^2.0.0 copied to clipboard
FlutterLens is a set of tools to help find and debug UI or performance issues from the Flutter app itself.
FlutterLens π
[FlutterLens Branding]
In-app debug tools for Flutter UI, rendering, logs, navigation, and device diagnostics - no context switching required.
Features β’ Installation β’ Quick Start β’ Debug Logs β’ Tips β’ License
| Screenshots | ||
|---|---|---|
| [Flow 1] | [Flow 3] | [Flow 5] |
| π§² Edge tray launcher docked to the right side; draggable and always accessible. | π Bottom sheet tools grid with active/inactive visual states and quick toggles. | π¨ Color result card showing selected color in HEX, RGB, and HSL with copy action. |
| [Flow 2] | [Flow 4] | [Flow 6] |
| π§Ύ Version ticker displaying app, FlutterLens, Flutter, Dart, and build mode details. | π± In-app debug logs to inspect console logs inside the running app. | β‘ Device details to quickly check and share device details. |
β¨ Features #
- π§ Screen Name Overlay: See the active route/screen while navigating.
- π Debug Logs Viewer: Capture and inspect console logs inside the running app.
- π± Device Details: Inspect model, OS, screen metrics, and hardware info in-app.
- π― Color Picker: Pick any on-screen pixel color quickly.
- π§± Debug Paint / Layout Insights: Visualize layout boundaries and spacing behavior.
- π Repaint Rainbow: Spot frequent repaints to detect expensive widgets.
- β‘ Performance Overlay Toggle: Enable Flutter performance overlay directly from the panel.
- π§² Edge Tray Launcher: Open FlutterLens from a draggable edge tray.
- π§Ύ Version Ticker: Live ticker for app/build/flutter/dart/FlutterLens versions.
- π¨ Picked Color Card: View HEX/RGB/HSL + copy from the panel.
- πΎ Sticky Debug Toggles: Core flags are persisted across launches.
π§° Tool-by-tool quick map #
Debug Paintβ togglesdebugPaintSizeEnabledSize Infoβ enables render box inspector overlayRepaint Rainbowβ togglesdebugRepaintTextRainbowEnabledDebug Logsβ opens in-app logs viewerPerf Overlayβ togglesshowPerformanceOverlayColor Pickerβ pixel pick + color card/copy flowDevice Detailsβ opens device info sheetScreen Nameβ route name overlay (withDebugNavigatorObserver)
π¦ Installation #
Add this to your pubspec.yaml:
dependencies:
flutter_debug_tools: ^2.0.0
Then run:
flutter pub get
π Quick Start #
import 'package:flutter/material.dart';
import 'package:flutter_debug_tools/flutter_debug_tools.dart';
Future<void> main() async {
await DebugLogCapture.runApp(() async {
runApp(const MyApp());
});
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
final navigatorObserver = DebugNavigatorObserver();
return FlutterLens(
builder: (context, showPerformanceOverlay, child) {
return MaterialApp(
title: 'FlutterLens Demo',
showPerformanceOverlay: showPerformanceOverlay,
navigatorObservers: [navigatorObserver],
home: const Placeholder(),
);
},
);
}
}
π§© Minimal integration (without log zone wrapper) #
import 'package:flutter/material.dart';
import 'package:flutter_debug_tools/flutter_debug_tools.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return FlutterLens(
builder: (context, showPerformanceOverlay, child) {
return MaterialApp(
showPerformanceOverlay: showPerformanceOverlay,
home: const Placeholder(),
);
},
);
}
}
ποΈ Disable in non-debug environments #
FlutterLens(
isEnabled: kDebugMode,
builder: (context, showPerformanceOverlay, child) {
return MaterialApp(
showPerformanceOverlay: showPerformanceOverlay,
home: const HomeScreen(),
);
},
)
π§Ύ Debug Logs (How It Works) #
- β
Captures Dart-side console logs (including
printoutput in the wrapped zone) - β Captures framework/platform error callbacks and shows them in the logs viewer
- β
Lets you filter logs by level (
All,Info,Warn,Error,Debug) - β Tap any log row to copy it to clipboard
If you already use another logger, you can still use it; FlutterLens will continue showing captured console/error output in the viewer.
π What gets captured #
print(...)output (insideDebugLogCapture.runAppzone)FlutterError.onErrorPlatformDispatcher.instance.onError- uncaught zoned async exceptions
π Public logging APIs #
DebugLogCapture.install()DebugLogCapture.runApp(() async { ... })DebugLogStore.instance.add(...)DebugLogStore.instance.clear()
π§ Navigation integration #
To populate route names in the Screen Name overlay, attach DebugNavigatorObserver:
MaterialApp(
navigatorObservers: [DebugNavigatorObserver()],
home: const HomeScreen(),
)
π±οΈ Panel interactions #
- Swipe down on the panel to dismiss.
- Tap outside the panel to dismiss.
- Drag the right-edge tray up/down to reposition.
- Tap the tray to open FlutterLens.
π‘ Tips #
- Use FlutterLens only in debug/dev environments.
- Add
DebugNavigatorObserverfor better route visibility in overlays. - Keep an eye on
Repaint Rainbow+Performance Overlaytogether for quick perf diagnosis. - If Dart/Flutter versions show fallback values, pass build-time dart-defines for those keys.
π Credits #
Built with:
π Bugs or Requests #
- Bug report: Open issue
- Feature request: Open request
- PRs are welcome! π
π License #
MIT License