router_observer 1.0.0
router_observer: ^1.0.0 copied to clipboard
A complete navigation observability toolkit; structured events, console logging, breadcrumbs, screen tracking analytics, and an in-app debug overlay.
Changelog #
1.0.0 #
Complete ground-up rebuild as a full navigation observability toolkit.
Grounded in the Flutter 3.x NavigatorObserver API (all seven callbacks).
New #
- Sealed event model:
NavEventis now a sealed hierarchy (NavPush,NavPop,NavRemove,NavReplace,NavTopChange,NavGestureStart,NavGestureEnd) supporting exhaustiveswitch. Events carryRouteInfosnapshots, timestamps, monotonic sequence numbers, navigator labels, and stack snapshots. - Smart route name resolution (
defaultNameResolver): resolvessettings.name,Page.name/Page.key, and labels dialogs[dialog], bottom sheets[bottom-sheet], popups[popup]instead of<anonymous>. - Composable listeners (
NavListener): share one listener instance across multiple observers/navigators.ConsoleNavLogger: readable one-line logs, optional ANSI colors, stack/argument display, JSON mode, custom formatter.NavBreadcrumbs: ring buffer withdump()/describe()for crash reports and anonCrumbforward callback.ScreenTracker: analytics-grade screen views with time-on-screen measurement and popup awareness.NavCallbackListenerandRecordingNavListener(test utility).
NavDebugOverlay: in-app draggable bubble with a live navigation timeline and per-observer current stacks; debug-mode-only by default.- Live inspection:
RouterObserver.currentStack,currentRoute,stackDepth, and a broadcasteventsstream. - Crash-proof delivery: listener exceptions are reported via
FlutterError.reportErrorand never reach the navigation code path.
Breaking changes (from 0.1.0-dev) #
NavTelemetryObserveris nowRouterObserver;NavObserverConfigis nowRouterObserverSettings.- Sinks (
NavEventSink,PrintSink,LoggingSink,CompositeSink) are replaced by listeners (NavListener,ConsoleNavLogger, ...). Fan-out is built in: pass multiple listeners. NavEventType/NavSeverityenums are replaced by the sealedNavEventsubtypes; severity is gone (filter withrouteFilter/eventFilter).sampleRateandrateLimitPerMinuteare replaced by the generaleventFilterpredicate (see README recipes).- The
package:loggingdependency is removed; the package now depends only on the Flutter SDK. Forward events to any logger with a 3-lineNavCallbackListener.
1.0.0-dev.1 #
- Prerelease of 1.0.0; see the 1.0.0 notes above.
0.1.0-dev.2 #
- Validate the automated (GitHub Actions + OIDC Trusted Publisher) release pipeline.
- No functional or API changes since
0.1.0-dev.1.
0.1.0-dev.1 #
Initial preview release.
NavTelemetryObserver: aNavigatorObserverthat emits structuredNavEvents for push/pop/remove/replace/gesture/changeToptransitions.NavObserverConfig: severity filtering, sampling, per-minute rate limiting, popup/gesture inclusion toggles, and pluggable PII redaction (ArgumentRedactor/defaultRedactor).- Sinks:
NavEventSinkabstraction withPrintSink,LoggingSink(package:logging), andCompositeSinkfan-out. NavEvent.toJson()for JSON-encodable structured output.- Zero DI coupling: optional
loadConfigFromDI/loadSinkFromDIhooks onNavTelemetryObserver.observers(...).