A purely-observational Dio interceptor that feeds the DevTools Network
tab. It never mutates the request/response/error — always calls
handler.next(...) unchanged.
A small, draggable floating button used to open the DevTools panel.
Must be used as a (possibly indirect) child of a Stack (see
DraggableFloatingWidget).
A small, draggable, resizable floating window showing the same
DevTools tab content (Network / Logs / Performance / Info) as the
full panel — not a stripped-down summary — just confined to a
smaller window that floats over the app instead of covering the
whole screen. Lets a developer watch live activity while still
freely interacting with (and testing) the rest of the app
underneath, closer to inspecting a page in a browser than a
full-screen-only panel would allow.
Positions its content via an internally-managed, user-draggable
offset — defaulting near the bottom-right corner of the screen (or
wherever defaultOffset says). Shared by DevToolsBubble and
DevToolsFloatingWindow so both drag (and edge-peek) identically.
Live FPS/jank monitor built from CorextraDevTools.instance.performance
— modeled on Flutter DevTools' own Performance view (a scrolling frame
timeline split into UI/build time vs Raster/GPU time, with a 60 FPS
budget line and jank highlighted), scaled down to what's derivable
without a VM Service connection: per-frame build/raster durations from
SchedulerBinding, nothing from the engine's own trace events.
Pretty-prints data as indented JSON for display in the DevTools
panel — the common case for an API request/response body. Falls
back to a short, readable summary for the two shapes JSON can't
represent meaningfully: raw bytes (Uint8List, e.g. a
ResponseType.bytes download) and Dio's multipart FormData
request bodies. Anything else that isn't valid JSON (plain text,
HTML, XML, ...) is shown as-is via Object.toString.