ispectify 5.0.0-dev58
ispectify: ^5.0.0-dev58 copied to clipboard
Pure-Dart structured logging, tracing, filtering, history, observers, export, and redaction core for the ISpect toolkit.
Changelog #
5.0.0-dev58 #
Breaking Changes #
- All logging now flows through a unified
trace()pipeline. The pipeline produces structured data with consistent tracking across every layer of the app. - Log data was flattened. The old inheritance-based types are gone, replaced by a metadata-driven
ISpectLogDatastructure. Field accessors likeisNetworkandhttpStatusCodemoved into extensions. - Typed subclasses such as
NetworkRequestLog,DioResponseLog, andBlocLifecycleLoghave been removed. Use the new trace system instead. ISpectLogTypeis no longer an enum. It is now afinal class, soISpectLogType.valuesis gone in favour ofISpectLogType.builtIn, and exhaustive switch on its values is no longer possible. The upside is that custom types are first-class. You can writeconst ISpectLogType('my-key', category: 'firebase')directly.ISpectLogData.idis now a 26-character ULID string instead of a per-isolate auto-incrementing int. IDs are lexicographically sortable, globally unique across processes, isolates, and reloaded log files, and they survive JSON round-trips through the new optionalidconstructor parameter. Equality andhashCodeuse the id alone, so two entries with identical content are no longer considered equal. That fixes set and list deduplication on persisted history.
Added #
- A new
ispect_layoutpackage, a standalone visual layout inspector for Flutter. Tap any widget to read its size, constraints, padding, decoration, text styles, transform matrix, and clip shape. Compare two widgets to see the pixel gap between them. It is forked frominspector4.1.0 and maintained inside the ISpect monorepo. On top of the upstream feature set it adds expanded render-object coverage (RenderTransformmatrix decomposition,RenderBackdropFilter, everyRenderClip*,RenderEditable), a wrapper-ancestors section for same-size proxies, gradient, shadow, and border-radius breakdowns, image-source introspection, a RichText preview, and a refactoredBoxInfoPanelWidgetsplit into testable extractor and widget modules. - An extensible plugin architecture for the ISpect panel, with lifecycle hooks, custom screens, and action items.
SafePluginScreenand a globalErrorWidgetoverride keep third-party plugin failures from taking down the host UI. - You can now define your own
ISpectLogTypeinstances with category, configurable title, color, and icon. Theme validation safely merges custom and built-in entries. - A database interceptor cookbook with drop-in interceptors and runnable examples for Hive, Isar, Drift, Sembast, ObjectBox, Realm, Firestore, Sqflite, SharedPreferences, GetStorage, and FlutterSecureStorage in
packages/ispectify_db/example.
Improvements #
- The new trace API adds
trace(),traceAsync(),traceSync(), andtraceTransaction()for flexible logging with correlation support. - New domain extensions cover common operations, including
authTrace(),storageTrace(),push(),analyticsEvent(),paymentTrace(), andgrpcTrace(). - The new log exporter writes JSON Lines, plain text, Markdown, and CSV, with redaction and security protection built in.
- The desktop layout was redesigned with a resizable split view, keyboard navigation, and persistent layout ratios.
- Search and filter were reworked. Field matching gets inline navigation, filters use chip-based selection and category grouping, and correlation IDs and transaction IDs are filterable directly from log details.
- Correlated network logs now appear as expandable transaction cards with status and duration indicators, plus dedicated transaction badges and detailed request and response views.
- Live tail picked up new-log indicators, scroll-to-edge support, and relative time formatting.
- 21 new icons and colors landed for various log types, and the JSON viewer gained array support and async search.
- Inspector controls now support multi-key
ShortcutActivatorshortcuts through FlutterShortcutsandActions, aninitialPanelExpandedflag for default panel state, configurabledecimalPlaces, smart panel positioning, shape-border and border-radius extraction for clipping and physical widgets, and globally-transformed hit testing for accurate overlap detection. - The picker and zoom action bar swapped the tap-to-commit gesture for a floating Cancel and Confirm bar at the bottom of the screen. The bar includes zoom minus and plus controls, a live colour preview chip (hex value, tap to copy), and an adaptive compact layout that collapses labels on narrow screens.
- The colour picker's hex chip now picks the first side of the disc that fits fully on-screen, trying above, then right, then left, then below, instead of the previous binary above-or-right fallback. The readout no longer disappears when the picker hugs a corner.
- The picker and zoom snapshot is re-taken automatically when the surface size changes (desktop window resize, web layout shift, orientation change), so the loupe stays in sync with the live UI instead of showing stale pixels.
- The picker disc visual is back to the legacy strokeAlignOutside look. The image fills the full disc and three concentric strokes are painted outside the canvas with a soft drop shadow.
- Pluggable log formatters cover human-readable and JSON Lines output with ISO-8601 timestamps for console and exports.
- A new
consoleMessageparameter on trace, network, WebSocket, and BLoC logs lets you tailor IDE console output without touching structured metadata. ISpect.loggeris now constructed lazily and emits a developer warning when used beforeISpect.run.- Redaction reaches further. cURL commands go through
RedactionService,copyClipboardsupports opt-in clipboard redaction, and redaction statistics for data and header operations are available optionally. - A new log correlation index gives O(1) request, response, and error lookup in the log screen, which removes scan-time matching on large histories.
- Database tracing picked up
DbSqlDigestfor normalized SQL grouping,DbMessageFormatterfor consistent log construction, and newsizeBytesandcacheHitfields for performance insight. - Accessibility improvements include semantic labels on log cards and transaction widgets, larger touch targets (36dp minimum), and tooltips on app bar navigation, search, and filter actions.
- Expanded log cards now show a single-line metadata strip under the title with id, trace source, operation or target, duration, and exception type. That removes a hop into the detail view for the most common triage info.
- The log action sheet displays the log type's description in its header, so you can confirm the type before opening the details.
- Action buttons on log cards shrank to 28dp with tighter context-menu tile spacing for higher density on phones.
Behavioral Changes #
- All network interceptors now have PII redaction enabled by default, using an expanded list of sensitive keys.
ISpectBlocObserverautomatically correlates events, transitions, and changes for easier debugging.- The tips dialog moved from an automatic popup to a dedicated app bar icon.
- The navigator observer is auto-wired.
ISpectNavigatorObserver.observers()now publishes the installed observer inISpectNavigatorObserver.current, andISpectBuilder.wrapfalls back to it whenISpectOptions.observeris not provided. The quick-start no longer requires sharing the same observer instance betweenMaterialApp.navigatorObserversandISpectOptions.observer. The navigation drill-down screen wires up automatically, and an explicitISpectOptions.observerstill wins. - The developer warning previously emitted by
debugPrintwhenISpect.loggerwas accessed beforeISpect.runorISpect.initializehas been removed. The lazy fallback continues to return a defaultISpectLogger. UI integration still requires explicit initialization.
Deprecations #
ISpectScopeController.of(context)is deprecated in favour of the canonicalISpect.read(context). The two were duplicate entry points to the sameInheritedNotifierlookup. The old method remains as a forwarder and will be removed in 6.0.0.- Per-callback network filters (
requestFilter,responseFilter,errorFilter) onispectify_dio,ispectify_http, andispectify_wsare deprecated in favour of the new composable filter chain. Existing callbacks keep working as forwarders and will be removed in 6.0.0. - The
ISpectBuilder(...)constructor is deprecated in favour ofISpectBuilder.wrap(...). The factory short-circuits before constructing the widget whenkISpectEnabledis false, which preserves tree-shaking. The constructor defers the disabled-build short-circuit tobuild(), which keeps the state class reachable. The constructor will be made private in a stable 5.x release. ISpectLocalizations.delegates(...)is deprecated in favour of the newISpectLocalizations.delegate(...). The old method injectsGlobalMaterialLocalizations,Cupertino, andWidgetsalongside ISpect's delegate, which mutates the host app's localization stack even in release builds. The new method returns only ISpect's delegate concatenated with the host's list and leaves the Globals to the host. To migrate, list the threeGlobal*Localizations.delegateentries yourself and spread...ISpectLocalizations.delegate()after them. The legacy method continues to work as a forwarder during 5.x and will be removed in 6.0.0.
Bug Fixes #
- Fixed critical "deactivated widget's ancestor" errors in
ISpectToasterand clipboard operations by handlingBuildContextcorrectly across async gaps. - Resolved memory leaks in UI components and made JSON parsing more robust on large datasets.
- Added protection against CSV injection in exports and capped clipboard size to prevent memory issues.
- Inspector overlay rects and pointer coordinates are now clamped to screen bounds, which fixes off-screen tracking and out-of-viewport selection.
- The inspector uses Flutter's native hit-test pipeline, so taps no longer surface widgets from routes beneath the active one (non-opaque pages, dialogs, modal sheets) or from
OffstageandIgnorePointersubtrees. - When the selected
RenderParagraphis actually rendering an icon (a single Private-Use-Area code point inMaterialIcons,CupertinoIcons, or a similar icon font), the info panel now shows the glyph itself plus itsU+XXXXcode point under anICONsection, instead of unreadable tofu underTEXT. describeIdentityand other diagnostic-only formatters were replaced with release-safe equivalents, so the layout inspector no longer throws or leaks debug data in profile and release builds.JsonScreen.didUpdateWidgetnow compares the data'sidinstead of object identity, so the viewer no longer rebuilds its node tree and discards expansion state when the parent supplies a fresh map with the same content.
CI/Tests #
- The test suite was refactored for the new trace-based architecture, with better validation for JSON and multipart redaction.
- Added widget tests for
ISpectAppBar,EmptyLogsWidget,LogCard, andISpectBuilder. Added integration tests for the BLoC, Dio, and HTTP logging pipelines, plus a comprehensiveISpectBlocObserverlifecycle and correlation suite. - Integrated Codecov coverage reporting with a Flutter version matrix in CI and added a coverage badge to the README.
- Unified the testing and analysis workflows on GitHub Actions.
Migration Guide #
// BEFORE (v4.x): Pattern matching on typed subclasses
if (log is NetworkRequestLog) {
print(log.method);
print(log.url);
}
// AFTER (v5.0): Use ISpectLogDataX convenience getters
import 'package:ispectify/ispectify.dart';
if (log.isNetwork) {
print(log.traceOperation); // HTTP method
print(log.traceTarget); // URL
print(log.httpStatusCode); // from traceMeta
}
// NEW: Trace API for custom operations
logger.traceAsync(
category: authCategory,
source: 'firebase',
operation: 'signIn',
run: () => auth.signIn(email, password),
);
// NEW: Domain extensions
logger.push(source: 'fcm', operation: 'received', messageId: id);
logger.analyticsEvent(source: 'firebase', event: 'purchase');
4.7.4 #
Changes #
- Removed explicit button styling from action sheet buttons to leverage theme defaults.
4.7.3 #
Changes #
- JSON Truncation Limit: Bump default JSON truncation limits for maximum depth, string length, and iterable size.
4.7.2 #
Improvements #
- Web & WASM Compatibility: Decoupled
dart:iodependencies from core file utilities to ensure theispectpackage works flawlessly on the Web and WASM targets. Native functionality remains unchanged.
4.7.1 #
Changes #
ispectify:
time,error,stackTrace, andlevelmetadata are now properly passed and displayed in native platform logs (developer.log) for better debugging and crash reporting.
4.7.0 #
🚨 IMPORTANT: Behavioral Changes #
ISpect is now DISABLED by default. To ensure production safety and enable effective tree-shaking, ISpect is no longer included in builds by default.
To enable ISpect, you must use the following build flag:
flutter run --dart-define=ISPECT_ENABLED=true
If the flag is not set (default), all ISpect-related logic, UI, and logging will be completely removed from your application binary during compilation.
New Features #
Zero-Conditional API
Factory methods that handle kISpectEnabled check internally — no if/else needed in your code:
void main() {
ISpect.run(() => runApp(const MyApp()));
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
localizationsDelegates: ISpectLocalizations.delegates(),
navigatorObservers: ISpectNavigatorObserver.observers(),
builder: (_, child) => ISpectBuilder.wrap(child: child!),
home: const HomePage(),
);
}
}
New methods:
ISpectBuilder.wrap()— returns child when disabledISpectNavigatorObserver.observers()— returns empty list when disabledISpectLocalizations.delegates()— returns base delegates when disabled
Enhanced Observer API
ISpectNavigatorObserver.observers() now accepts optional pre-configured observer for full customization:
navigatorObservers: ISpectNavigatorObserver.observers(
observer: ISpectNavigatorObserver(
onPush: (route, prev) => print('pushed'),
onPop: (route, prev) => print('popped'),
isLogGestures: true,
),
additional: [AnalyticsObserver()],
),
Security Improvements #
Verified Tree-Shaking
Tested production builds show effective code removal:
| Build | APK Size | "ispect" strings |
|---|---|---|
| Obfuscated Production | 42.4 MB | 5 |
| Non-obfuscated Production | 44.5 MB | 34 |
| Development | 51.0 MB | 276 |
Documentation #
- Updated examples to use zero-conditional API
- Added security recommendations section
Migration #
Before (conditional):
navigatorObservers: kISpectEnabled ? [ISpectNavigatorObserver()] : [],
builder: (_, child) {
if (kISpectEnabled) return ISpectBuilder(...);
return child!;
},
After (zero-conditional):
navigatorObservers: ISpectNavigatorObserver.observers(),
builder: (_, child) => ISpectBuilder.wrap(child: child!),
4.6.0 #
🚨 Breaking Changes #
API Renaming
To improve consistency and clarity, several core classes and methods have been renamed:
Methods:
logCustom()→logData()- Better reflects the purpose of logging custom data
Classes:
ISpectify→ISpectLogger- More descriptive name for the main loggerISpectifyLogger→ISpectBaseLogger- Clarifies the base logger abstractionISpectifyFlutter→ISpectFlutter- Shorter, cleaner naming
ISpectTheme API Changes
1. Simplified log type filtering:
// ❌ Before (verbose)
logDescriptions: [
LogDescription(key: 'riverpod-add', isDisabled: true),
LogDescription(key: 'riverpod-update', isDisabled: true),
],
// ✅ Now (clean and simple)
disabledLogTypes: {'riverpod-add', 'riverpod-update'},
2. Unified color theming with ISpectDynamicColor:
// ❌ Before (separate light/dark properties)
lightBackgroundColor: Colors.white,
darkBackgroundColor: Colors.black,
lightDividerColor: Colors.grey.shade300,
darkDividerColor: Colors.grey.shade800,
// ✅ Now (unified with ISpectDynamicColor)
background: ISpectDynamicColor(
light: Colors.white,
dark: Colors.black,
),
divider: ISpectDynamicColor(
light: Colors.grey.shade300,
dark: Colors.grey.shade800,
),
3. Customizable log descriptions:
logDescriptions now accepts Map<String, String> for overriding default descriptions:
ISpectTheme(
logColors: {'error': Colors.red},
logIcons: {'error': Icons.error},
logDescriptions: {
'error': 'Critical application errors',
'info': 'Informational messages',
},
)
✨ New Features #
Interceptor Configuration
- Fluent API builders for cleaner interceptor settings configuration
- Multiple observers support with improved notification mechanism
Logging Enhancements
- Enhanced context:
additionalDatasupport with centralizedLogFactory - Resource management: Proper disposal functionality in
ISpectLogger - Localization: Full support for bloc error logs and provider activity across all languages
Settings & Filtering
- Persistent settings: Your log preferences are now saved between sessions
- Advanced filtering: Improved log type filtering with better UI controls
Security & Privacy
- Strategy-based redaction: Configure via
RedactionServicewith composite, key, and pattern strategies - Comprehensive tests: Unit tests for settings builders and redaction service
Platform Support
- Platform abstraction: File operations now work correctly across all supported targets via platform-aware directory handling
🔧 Improvements #
Performance
- 70% faster filtering: Log filter updates now use debouncing for dramatic performance gains
- Optimized rendering: Widget rendering and list creation now use fixed-size lists
- Better caching: JSON viewer uses cached contrast lookups for stable text rendering
Architecture
- Unified logging interface: Consistent API across HTTP and WebSocket interceptors
- Cleaner separation:
ISpectViewControllernow uses dedicatedFilterManager/SettingsManagerand explicit import/export services - Platform-aware output: All logging migrated to
PlatformOutputabstraction - Sealed models:
FileProcessingResultand related JSON/observer models for type-safe error handling
Code Quality
- Better initialization: Logger now uses
addPostFrameCallbackfor improved state management - Simplified logic: Cleaner header redaction in
RedactionService - Reduced duplication: Improved code organization across all modules
- Enhanced error handling: More robust error handling and logging throughout
Documentation
- Comprehensive guides: Detailed usage examples and configuration guides added
- Better comments: Improved inline documentation for easier maintenance
🐛 Bug Fixes #
Type Safety
- HTTP/Dio interceptors: Improved type safety across all interceptor implementations
- JSON selector: Enhanced null-safety and generic type constraints
- Memory safety: Unmodifiable cache views prevent accidental mutations
Performance & Memory
- Widget optimization: Fixed memory leaks in widgets and list creation
- Object pool: Resolved lifecycle management and performance issues
- Circular dependencies: Fixed initialization order in service dependency graph
Functionality
- Case-insensitive redaction: Redact method now handles keys regardless of case
- Error handling: More robust error handling across all modules
4.4.6 #
Changes #
- Removed hard dependency on
share_plusby introducing configurable share callbacks; all share flows now rely onISpectOptions.onShare. - Removed
open_filexusage in favor of an optionalISpectOptions.onOpenFilecallback. - Conditionally render share/open actions across UI so buttons disappear when callbacks are not supplied.
- Eliminated external
provider,device_info_plus, andpackage_info_plusdependencies; JSON explorer now ships with an internal selector. - Feedback builder and
ispect_jirapackage removed to streamline core functionality. - Updated descriptions of log tags in the info bottom sheet for clarity and consistency.
Added #
- New
ISpectShareRequest,ISpectShareCallback, andISpectOpenFileCallbackcontracts to keep integrations package-free. - Added
bloc-doneevent logging toispectify_blocfor comprehensive BLoC lifecycle tracking. - Added
SuperSliverListsupport in JSON/logs viewer for improved performance with large datasets.
4.4.2 #
Added #
- Added optional paramater
contexttoISpectOptions. This context is used to openISpectscreen.
4.4.1 #
Changes #
observerparameter moved fromISpectBuildertoISpectOptionsfor better consistency and usability.
4.4.0 #
Added #
- New package
ispectify_db: lightweight database logging with tracing and transaction markers. - cURL command copy functionality for HTTP logs in the log card, supporting both Dio and HTTP interceptors.
Enhancements #
- Stronger and more consistent redaction across HTTP/Dio/WS (incl. Base64/Base64URL, Unicode-friendly); versions synced across packages.
Fixed #
- ispectify_http: use
responseBodyin logs; separate request/response data; preserve non-Map error payloads; redact multipart fields/files (filenames masked). - ispectify_dio: redact
FormDatain request/response (filenames masked); mark error logs withLogLevel.error. - ispectify_ws: mark error logs with
LogLevel.error. - ispectify_db: no commit after rollback; correct log levels; safer
additionalData.value. - core: fix
_handleLogconstructor argument order.
Tests #
- HTTP: response body usage, array error payloads, multipart redaction.
- DB: rollback emits no commit; error/success log level assertions.
4.3.6 #
- Documentation updates
4.3.4 #
Architecture Refactoring #
- Refactored JSON viewer services
- Replaced monolithic services with specialized implementations:
- Split
JsonViewerCacheServiceintoSearchCacheServiceandNodeHierarchyCacheService - Decomposed
JsonNodeServiceintoNodeExpansionService,NodeCollapseService, andNodeNavigationService - Implemented strategy pattern for
JsonSearchServicewith pluggable search algorithms - Added universal object pool with dependency injection support
- Split
- Migrated from static method calls to instance-based service architecture
- Eliminated temporary v2 files, replaced legacy implementations
Performance Improvements #
- Object pooling reduces memory allocations by ~60% through reusable collections
- LRU caching improves search performance by ~80% with intelligent eviction
- Adaptive batch processing for large JSON datasets (80-300 items per batch)
- Widget memoization reduces unnecessary rebuilds by ~70%
- Automatic algorithm selection based on data characteristics
- Optimized UI update frequency to prevent performance degradation
Technical Changes #
- Implemented Facade pattern for unified service interfaces
- Added Factory pattern for flexible service instantiation
- Full dependency injection support for improved testability
- Real-time performance metrics and memory tracking
- Type-safe generic implementations for object pools and caches
- Separated cache management for search results and node hierarchy
Core Component Updates #
- Updated
JsonExplorerStoreto use new service architecture - Migrated search operations from static to instance methods
- Integrated specialized cache services with clear boundaries
- Added comprehensive performance monitoring throughout the system
Fixed #
- Resolved memory leaks in cache management
- Fixed circular dependencies in service initialization
- Corrected object pool lifecycle management
- Eliminated performance bottlenecks in large JSON processing
- Improved testability by removing static dependencies
Migration #
- All legacy services replaced with new implementations
- Maintained backward compatibility for existing widget APIs
- Added comprehensive architecture documentation
4.3.2 #
Added #
- Optional redaction toggle in settings (enabled by default):
ISpectDioInterceptorSettings.enableRedactionISpectHttpInterceptorSettings.enableRedactionISpectWSInterceptorSettings.enableRedaction
- Redactor-aware serialization for network data models:
ispectify_dio:DioRequestData.toJson,DioResponseData.toJson,DioErrorData.toJsonnow accept an optionalRedactionServiceand (when provided) redact headers, data, and metadata. Per-callignoredValues/ignoredKeyssupported.ispectify_http:HttpRequestData.toJson,HttpResponseData.toJsonupdated similarly; redaction applied when a redactor is passed.
Enhancements #
- Apply centralized sensitive-data redaction consistently before logging and when serializing
additionalDataacrossdio/http/wsinterceptors. Interceptors pass their redactor into modeltoJson(...)calls when redaction is enabled. ispectify_dio:- Request/response/error logs redact request headers/body, response headers/body, and common metadata (
query-parameters,extra).FormDatabodies are represented with a safe placeholder.
- Request/response/error logs redact request headers/body, response headers/body, and common metadata (
ispectify_http:- Request/response logs redact headers and (when parsable) JSON/string bodies; multipart request details are preserved in shape while avoiding sensitive content.
ispectify_ws:- Interceptor respects the redaction toggle and redacts sent/received payloads when enabled.
Fixed #
- Preserve response headers shape while redacting in
ispectify_dio(Map<String, List<String>>) to avoid type/cast issues.
Updates #
- Update
draggable_paneldependency to version 1.2.0. See what's changed indraggable_panel: https://pub.dev/packages/draggable_panel/changelog
4.3.0 #
Added: #
- Add
LogsJsonServicefor structuredJSONexport/import of logs and integrate sharing/import features intoISpectViewControllerand UI. - Implement
DailyFileLogHistoryfor file-based log persistence with daily sessions and provide related screens for browsing and sharing sessions. - Added
File Viewerto settings sheet inISpectscreen to view and manage log files. ispectify_wspackage for WebSocket (ws package) logging withISpectintegration.
Enhancements: #
- Extend
ISpectFlutter.initto accept customILogHistoryinstances and disable default print logging. - Refactor file handlers (web and native) to support configurable file types and
JSONoutput. - Make settings and info callback parameters optional in the app bar and conditionally render related UI.
- Add ability to open log files directly from the
ISpectscreen.
Changes: #
- Rename
ISpectLoggerDioLoggertoISpectDioInterceptorfor clarity and consistency with other interceptors - Rename
ISpectLoggerHttpLoggertoISpectHttpInterceptorand adjust its usage in the example project - Rename
ISpectLoggerBlocObservertoISpectBLocObserverfor consistency - Rename
iSpectifytologgerand update related classes and documentation for consistency
Draggable Panel #
- Added: Position change listener API in
DraggablePanelController(addPositionListener/removePositionListener). - Added: Public
dockBoundarygetter for consistent boundary logic across widget and controller. - Changed:
toggle()now respects currentpanelState(notinitialPanelState). Auto-toggle on mount removed to preserve user state. Initial position is clamped and (when starting closed) docked to the nearest edge. - Fixed: Panel no longer resets to default after visibility toggles; duplicate position callbacks removed; unified docking logic.
- Performance: Batched x/y updates during drag via
setPosition(x, y); reduced redundant notifications and rebuilds; lifecycle safety (mounted checks) and controller rewire indidUpdateWidget.
4.2.0 #
Added: #
- Introduce navigation flow feature to visualize app route transitions.
- Ability to share log with the applied filters in the
ISpectscreen.
Enhancements: #
- Extend
ISpectNavigatorObserverto bufferRouteTransitionobjects with unique IDs, timestamps, and structured logging using aTransitionTypeenum. - Add
RouteTransitiondata model,Listextensions, androuteName/routeTypeextensions for richer routemetadata. - Improve
ISpectOptionsequality andtoStringimplementations withDeepCollectionEquality. - Toggle default
isLogModalsbehavior tofalsefor finer logging control.
4.1.9 #
Changes: #
- Replaced
LogScreenwith a generalizedISpectJsonScreen, which now accepts aMap<String, dynamic>JSONinput directly instead of extracting it from an object. - Refactored and migrated the
Colortohexstring conversion utility. - Performed minor improvements and code cleanups.
4.1.6 #
Changes: #
ISpectPanelItem->DraggablePanelItem;ISpectPanelButtonItem->DraggablePanelButtonItem.- Added tooltip snackbar when long press on the panel buttons and items.
Just add
descriptionfield to theDraggablePanelItemorDraggablePanelButtonItemto show the tooltip.
4.1.5 #
Enhancements: #
- Refactor
InspectorStateto modularize main child, overlay builders, and zoom state handling - Expose new zoom configuration constants and helper methods in
InspectorStatefor enhanced zoom and overlay management
Changes: #
- Revise
READMEinstructions across all packages to showcase new initialization patterns (e.g. ISpectFlutter.init,ISpectJiraClient.initialize) - Rename
ISpectLoggerActionItemtoISpectActionItemand update references in docs and examples - Add
ISpectPanelItemandISpectPanelButtonItemmodels and corresponding usage samples.Records->Models - Refresh quick start and advanced feature code snippets to illustrate updated APIs and options
- Unify headings (Basic Setup, Custom Issue Creation, etc.) and standardize sample app flows
4.1.4 #
Enhancements: #
- Optimize
JSONtruncator to avoid expensive length calls, use correct recursion depth, and handle truncations efficiently - Extend filter search to include map keys, prevent circular loops, and streamline filter combination logic
- Refine dotted separator painter to distribute dots evenly within container bounds
CI: #
- Upgrade
actions/checkoutto v4 with full fetch depth - Harden validate_versions workflow with strict error handling,
version.configandVERSIONchecks - Switch grep to fixed-string mode and update workflow paths in
sync_versions_and_changelogs - Remove obsolete
update_changelogs.ymlfile
4.1.3 #
Infrastructure #
- Added comprehensive version management system:
- Created
version.configas single source of truth for package versions - Added automated dependency synchronization between internal packages
- Implemented CI/CD workflows for automatic version sync on changes
- Added scripts for easy version bumping: patch, minor, major, dev versions
- Created comprehensive documentation in VERSION_MANAGEMENT.md and VERSION.md
- Created
- Added validation for package versions:
- Pre-commit hooks to prevent inconsistent versions
- Automated checks for internal dependency consistency
- Pull request validation for versions and changelogs
Enhanced #
- Refactored and improved optimization for handling very large JSON in the detailed log screen.
- Improved search and scroll to matched item functionality in the detailed log screen.
Added #
- Added a button for copying next to the JSON item (map/iterable) inside the detailed log screen.
- Added the ability to share the full log as a file .txt or quickly copy the truncated log to the clipboard.
Changes #
- UI changes in ISpect and log screens for better usability.
- Bumped dependencies to the latest versions.
4.1.2 #
4.1.1 #
Added #
- Add screen size utility to detect and adapt UI based on device screen
- Implement alternative dialog-based UI for larger screen sizes
Fixed #
- Fix issue displaying API fields correctly in the console
Enhancements #
- Implement responsive design for settings bottom sheet and log screens using screen size detection
- Improve search functionality in JSON viewer, added scrolling to the found element
Changes #
- Remove platform-specific configurations for Android and iOS in the example project
- Add macOS support for the example project
4.1.0 #
Fixed #
- Replace square bracket references with backticks in code comments and documentation across multiple packages to improve code documentation readability and consistency
4.0.9 #
Added #
- JsonTruncatorService for more robust JSON truncation and formatting
- Introduced more granular widget rendering strategies in JSON explorer
Fixed #
- Fixed potential performance bottlenecks in JSON rendering
- Improved error handling in JSON formatting and logging
- Fix analyzer issue for pub score
Enhanced #
- Refactored JSON attribute rendering to reduce widget rebuilds
- Improved performance of text highlighting in JSON viewer
- Optimized context selection and memoization in JSON explorer components
Chore #
- Cleaned up unused code and simplified complex rendering logic
- Improved code readability in JSON viewer components
4.0.6 #
Added #
- Custom Performance Overlay - Changed the approach and some improvements
- Enhanced Log Navigation - Search, highlight, and expand/collapse functionality
- New Option:
logTruncateLength- Available inISpectLoggerOptionsfor configurable log truncation - New Configuration:
ISpectHttpInterceptorSettings- Added toISpectHttpInterceptorfor improved setup flexibility
Improved #
- JSON Handling - Async and lazy loading for better performance on large data structures
- Log Card Refactor - Improved readability and maintainability
- Error Handling - Added filtering for more precise issue tracking
Fixed #
- Security Cleanup - Removed
ispect_aipackage and related dependencies
4.0.5 #
Changed #
- Error display now limited to first 10,000 characters for large errors to prevent widget overload and application hanging
4.0.1 #
Breaking Changes #
ISpectScopeWrapperRelocation - Moved insideISpectBuilder. Now,ISpectBuilderserves as a one-stop solutionISpect.log()Update - Replaced withISpect.logger.log()for improved consistency and clarity
Added #
- Language Support - Chinese (zh_CN) localization
- JSON Log Viewer - Detailed log viewing as a
JSONtree structure - Enhanced HTTP Logs - HTTP request logging displays all details in
JSONtree format with search and filtering - Log Descriptions - Added
logDescriptionstoISpectThemeto add, modify, or disable descriptions in the info bottom sheet - Theme Scheme Screen - Included basic
Theme Scheme Screenin theISpectpanel for testing
Updated ISpectLogger #
- Documentation - Comprehensive documentation added to the
ISpectLoggerclass - Constructor Enhancement - Modified to accept optional components (
logger,observer,options,filter,errorHandler,history) - Configuration Method - Introduced
configuremethod to update existing inspector instance configuration - Internal Logic - Updated to leverage new components and options effectively
Improved #
- Bottom Sheet Revamp
- Removed
BaseBottomSheetwidget - Implemented
DraggableScrollableSheetwith configurableinitial,min, andmaxchild sizes - Updated build method to integrate
DraggableScrollableSheet - Adjusted layout and styling for new bottom sheet structure
- Removed
- Filtering Enhancements
- Added
ValueNotifierto manage filter enablement state - Introduced
SearchBarfor log filtering - Replaced
InkWellwithFilterChipfor title filtering - Adjusted layout and styling to support new search and filter components
- Added
- Navigation Logging
- Added properties to control logging of gestures, pages, modals, and other navigation types
- Updated
didPush,didReplace,didPop,didRemove, anddidStartUserGesturemethods - Introduced
validatemethod to determine if a route should be logged based on its type - Enhanced log messages with detailed route and argument information
Styling & Optimization #
- Improved consistency in terminology and formatting
- Streamlined descriptions for clarity and brevity
3.0.1 #
Fixed #
- Added
DraggablePanelControllertoISpectBuilderfor controlling the panel- See the example project for implementation details
3.0.0 #
BREAKING CHANGES #
-
Forked the
Talkerpackage (where I'm actively contributing) and added it toISpectasISpectLogger- This was done to ease usage and reduce external dependencies
- You can now use
ISpectLoggerto log all application actions
-
Separated main functions into different packages:
ispect_ai- For usingAIas a log reporter and log description generator (useful for managers and testers)ispect_jira- For usingJirato create tickets directly in the applicationispect_device- For getting device data and related informationispectify_http- For loggingHTTPrequestsispectify_dio- For loggingDiorequestsispectify_bloc- ForBLoClogging
Please see usage examples in the respective packages or in
ispect/exampleFor questions, contact:yelamanyelmuratov@gmail.com
2.0.8 #
Changed #
- Removed
ISpectPanelButtonandISpectPanelItemand replaced with Records - Separated
DraggablePanelinto its own package: draggable_panel
2.0.7 #
Breaking Changes #
- Jira and AI tools are now separate packages:
- Jira: ispect_jira
See usage examples in ispect_ai/example - ISpect AI: ispect_ai
See usage examples in ispect_jira/example
- Jira: ispect_jira
2.0.5 #
Added #
- Support to view MultiPart request and response in the Detailed HTTP Logs page (HTTP package)
2.0.0 #
Fixed #
- No Navigator in context when navigatorKey is not provided
- Panel height factor calculation
1.9.8 #
1.9.6 #
1.9.5 #
Added #
-
New logging method:
ISpect.trackfor custom analytics events (Amplitude, Firebase, etc.) -
Ability to change log colors and custom log icons
Example: (SuccessLog is your custom log)
theme: ISpectTheme( logColors: { SuccessLog.logKey: const Color(0xFF880E4F), }, logIcons: { ISpectLogType.route.key: Icons.router_rounded, SuccessLog.logKey: Icons.check_circle_rounded, }, ), -
Google AI integration for generating log descriptions and reports
Changed #
ISpectreplaced withISpect- UseISpectfor all logging purposes Example:ISpect.debug('Hello, ISpect!')->ISpect.debug('Hello, ISpect!')
1.9.3 #
Added #
- New option in
ISpectOptions:panelButtonsto add custom buttons to the panel - New options for NavigatorObserver:
isLogPages- Toggle logging of page changesisLogModals- Toggle logging of modal changesisLogOtherTypes- Toggle logging of other change types
isFlutterPrintEnabledoption in ISpect.run to enable/disable Flutter print handler
1.8.9 #
UI Updates #
- Improved color picker
- Updated light log colors
- Revised ISpect page layout
- Combined actions and settings
- Various minor visual enhancements
1.7.2 #
1.7.1 #
Added #
- Updated Feedback builder for sending developer feedback
- Fixed localization issues when using Navigator inside Feedback
1.7.0 #
1.6.3 #
Changed #
- Implemented print handler
- Moved ISpect's initialization to the ISpect's run method (See example project for implementation details)
1.5.7 #
1.5.5 #
Fixed #
- Issues with Draggable button
- Enable ISpect in release builds: manage conditions with
isISpectEnabled
1.4.8 #
Changed #
- Removed shared preference (incompatible with shrink)
- Added parameters to ISpectBuilder for Draggable button customization
1.4.4 #
Added #
- New parameter
actionItemsinISpectOptionsfor adding custom actions to ISpect page's actions sheet
1.4.3 #
1.4.2 #
Improved #
- Draggable button functionality with new maximum reverse point
- Added localization for Detailed HTTP Logs page
- Minor updates to Detailed HTTP Logs page
1.3.1 #
Improved #
- Refactored and optimized code
- Draggable button position now saved in cache
- Updated
analysis_options.yamlfile - Updated
README.mdfile
1.2.7 #
Added #
- More customization options for
ISpect.initHandling- Configure BLoC, Dispatcher error handling, and more during initialization
1.2.4 #
Added #
- New options for
ISpectLoggerdetailed monitor page: reverse all logs and toggle expansion - Moved performance tracker to
Draggablebutton (removed from settings sheet)
1.2.3 #
Changed #
navigatorContextno longer required for ISpectBuilder- To use Draggable button inside ISpectScreen, pass the key (not available by default)