app_debugger Pro
In-app developer tools panel — draggable FAB overlay, 10 painter debug toggles, device/package info pages.
build_prepareswaps to noop in release builds.
Version: 1.0.0
Variables
This brick has no generation-time variables.
Generated Packages
| Package | Purpose |
|---|---|
app_debugger_api | Shared AppDebuggerSDK contract |
app_debugger | Debug implementation — FAB overlay + panel + cubits |
app_debugger_noop | Release stub — all methods no-op |
Usage
Interactive
archipelago generate app_debuggerNon-interactive (CI)
archipelago generate app_debugger --config my_config.jsonGenerated Structure
features/
└── app_debugger/
├── app_debugger_api/
│ └── lib/src/
│ └── models/
├── app_debugger/
│ └── lib/src/
│ ├── di/
│ └── presentation/
│ ├── cubits/
│ ├── fab/
│ └── panel/
│ └── pages/
└── app_debugger_noop/
└── lib/src/
└── di/Wiring into MaterialApp
Wire the overlay into MaterialApp.router's builder parameter so the FAB has a proper Material/Directionality ancestor:
@override
Widget build(BuildContext context) {
final debuggerSdk = GetIt.instance<AppDebuggerSDK>();
return MaterialApp.router(
// ...
builder: (context, child) =>
debuggerSdk.overlay(child: child ?? const SizedBox.shrink()),
);
}In debug builds this renders the draggable FAB + panel. In release builds the noop implementation returns the child unchanged.
build_prepare Swap
build_prepare:
mappings:
- debug: app_debugger
release: app_debugger_noopRun dart run devtools/build_prepare/bin/build_prepare.dart before a release build to swap the dependency.
Painter Flags
The debug panel exposes 10 Flutter rendering diagnostic toggles (state persists across restarts via hydrated_bloc):
| Flag | Description |
|---|---|
repaintRainbow | Flash repainted regions with cycling rainbow colors |
paintBaselines | Show alphabetic and ideographic text baselines |
paintLayerBorders | Draw borders around each compositing layer |
paintPointers | Show pointer (touch/mouse) events as arrows |
paintSize | Overlay bounding box for every render object |
repaintTextRainbow | Flash repainted text areas specifically |
disableClipLayers | Skip clip layer compositing (performance test) |
disablePhysicalShapeLayers | Skip physical shape layers (performance test) |
disableOpacityLayers | Skip opacity layer compositing (performance test) |
profileBuilds | Log widget build times to the console |
Built-in Panel Pages
- Painter Flags — Toggle all 10 flags with a list of switches
- Device Info — OS version, screen size, device model (via
device_info_plus) - Package Info — App name, version, build number (via
package_info_plus)
Sub-Bricks
Additional debug panel pages are available as opt-in sub-bricks that plug into the same panel via DebuggerPanelPageRegistry:
| Brick | Description |
|---|---|
| app_debugger_network | Alice HTTP inspector |
| app_debugger_websocket | WebSocket traffic inspector |
| app_debugger_analytics | Analytics event inspector |
| app_debugger_feature_flag | Runtime flag spoofer |
| app_debugger_storage | Filesystem storage breakdown |
Install app_debugger first — it provides the archipelago:debug_panel_pages sentinel that sub-bricks hook into.