ispectify 5.0.0-dev44
ispectify: ^5.0.0-dev44 copied to clipboard
Pure-Dart structured logging, tracing, filtering, history, observers, export, and redaction core for the ISpect toolkit.
Changelog #
5.0.0-dev44 #
Breaking Changes #
- Universal Trace Architecture: Migration to a unified
trace()pipeline for all logging operations. This provides structured data and consistent tracking across all application layers. - Log data overhaul: Replaced inheritance-based log types with a flattened, metadata-driven
ISpectLogDatastructure. Specific getters likeisNetworkorhttpStatusCodeare now available via extensions. - Typed subclasses removed: Classes such as
NetworkRequestLog,DioResponseLog, andBlocLifecycleLoghave been removed in favor of the new trace system. ISpectLogTypeconverted fromenumtofinal class:ISpectLogType.valuesno longer exists — useISpectLogType.builtIninstead. Exhaustiveswitchon enum values is no longer possible. Custom types can now be created directly:const ISpectLogType('my-key', category: 'firebase').
Added #
ispect_layoutpackage: New standalone visual layout inspector for Flutter — tap any widget to read size, constraints, padding, decoration, text styles, transform matrix, and clip shape; compare two widgets to see the pixel gap between them. 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, allRenderClip*,RenderEditable), a wrapper-ancestors section for same-size proxies, gradient/shadow/border-radius breakdowns, image-source introspection, a RichText preview, and a refactoredBoxInfoPanelWidgetsplit into testable extractor and widget modules.- Inspector plugin system: 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. - Custom log types: Define your own
ISpectLogTypeinstances with category, configurable display title, color, and icon. Theme validation safely merges custom and built-in entries. - Database interceptor cookbook: 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 #
- New Trace API: Introduced
trace(),traceAsync(),traceSync(), andtraceTransaction()for highly flexible logging with correlation support. - Domain extensions: Specialized methods for common operations:
authTrace(),storageTrace(),push(),analyticsEvent(),paymentTrace(),grpcTrace(), and more. - Log Exporter: New utility for exporting logs in various formats (JSON Lines, Text, Markdown, CSV) with built-in redaction and security protection.
- Desktop layout: Completely redesigned with a resizable split view, keyboard navigation, and persistent layout ratios.
- Search & Filter: Completely revamped search with field matching and inline navigation. Filters now include chip-based selection and category grouping. Correlation IDs and transaction IDs are filterable directly from log details.
- HTTP Transaction Grouping: Correlated network logs are now displayed as expandable transaction cards with status and duration indicators, plus dedicated transaction badges and detailed request/response views.
- Logging logic: Enhanced live tail with new-log indicators, scroll-to-edge support, and relative time formatting.
- UI & Visualization: Added 21 new icons/colors for various log types and improved JSON viewer with array support and async search.
- Inspector controls: Multi-key
ShortcutActivatorshortcuts via FlutterShortcuts/Actions,initialPanelExpandedfor 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. - Picker & zoom action bar: Tap-to-commit gesture replaced with a floating Cancel / Confirm bar at the bottom of the screen, with on-bar zoom −/+ controls, a live colour preview chip (hex + tap-to-copy), and an adaptive compact layout that collapses labels on narrow screens.
- Smart HUD placement: Colour-picker hex chip now picks the first side of the disc that fully fits on-screen (above → right → left → below) instead of the previous binary above/right fallback, so the readout no longer disappears when the picker hugs a corner.
- Live re-capture on resize: Picker / zoom snapshot is automatically re-taken when the surface size changes (desktop window resize, web layout shift, orientation change), keeping the loupe in sync with the live UI instead of showing stale pixels.
- Picker disc visual: Ring stack restored to the legacy strokeAlignOutside look — image fills the full disc, three concentric strokes are painted outside the canvas with a soft drop shadow.
- Configurable log formatters: Pluggable human-readable and JSON Lines formatters with ISO-8601 timestamps for console output and exports.
consoleMessage: Optional parameter on trace, network, WebSocket, and BLoC logs to tailor IDE console output without affecting structured metadata.- Lazy logger initialization:
ISpect.loggeris now lazily constructed and emits a developer warning when used beforeISpect.run. - Redaction reach: cURL command redaction through
RedactionService, opt-in clipboard redaction oncopyClipboard, and optional redaction statistics for data and header operations. - Log correlation index: O(1) request/response/error lookup in the log screen, removing scan-time matching on large histories.
- Database tracing:
DbSqlDigestfor normalized SQL grouping,DbMessageFormatterfor consistent log construction, and newsizeBytesandcacheHitfields for performance insight. - Accessibility: Semantic labels on log cards and transaction widgets, increased touch targets (36dp minimum), and tooltips on app bar navigation, search, and filter actions.
Behavioral Changes #
- Redaction by default: All network interceptors now have PII redaction enabled by default using an expanded list of sensitive keys.
- BLoC correlation:
ISpectBlocObservernow automatically correlates events, transitions, and changes for easier debugging. - Tips dialog: Moved from automatic popup to a dedicated app bar icon.
- Auto-wired navigator observer:
ISpectNavigatorObserver.observers()now publishes the installed observer inISpectNavigatorObserver.current, andISpectBuilder.wrapfalls back to it whenISpectOptions.observeris not provided. The canonical quick-start no longer requires sharing the same observer instance betweenMaterialApp.navigatorObserversandISpectOptions.observer— the navigation drill-down screen wires up automatically. ExplicitISpectOptions.observerstill wins. ISpect.loggerlazy fallback: Removed the developer warning that was previously emitted viadebugPrintwhen the logger was accessed beforeISpect.run/ISpect.initialize. The lazy fallback continues to return a defaultISpectLogger; UI integration still requires explicit initialization.
Deprecations #
ISpectScopeController.of(context)is deprecated in favor of the canonicalISpect.read(context). The two were duplicate entry points to the sameInheritedNotifierlookup.ofremains 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 favor of the new composable filter chain. Existing callbacks continue to work as forwarders and will be removed in 6.0.0. ISpectBuilder(...)constructor is deprecated in favor ofISpectBuilder.wrap(...). The factory short-circuits before constructing the widget whenkISpectEnabledisfalse, preserving 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 favor of the newISpectLocalizations.delegate(...). The legacy method injectsGlobalMaterialLocalizations/Cupertino/Widgetsalong with 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, leaving the Globals to the host. Migrate by listing the threeGlobal*Localizations.delegateentries yourself and spreading...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 #
- Async lifecycle: Fixed critical "deactivated widget's ancestor" errors in
ISpectToasterand clipboard operations by correctly handlingBuildContextacross async gaps. - Stability: Resolved memory leaks in UI components and improved robustness of JSON parsing for large datasets.
- Security: Added protection against CSV injection in exports and limited clipboard size to prevent memory issues.
- Inspector overlays: Clamped overlay rects and pointer coordinates to screen bounds — fixes off-screen tracking and out-of-viewport selection.
- Cross-route hit-testing: Inspector now 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
Offstage/IgnorePointersubtrees. - Icon-glyph preview: When the selected
RenderParagraphis actually rendering an icon (a single Private-Use-Area code point inMaterialIcons/CupertinoIconsor a similar icon font), the info panel now shows the glyph itself plus itsU+XXXXcode point under anICONsection, instead of unreadable tofu underTEXT. - Inspector release safety: Replaced
describeIdentityand other diagnostic-only formatters with release-safe equivalents so the layout inspector no longer throws or leaks debug data in profile/release builds.
CI/Tests #
- Tests: Refactored test suite to support the new trace-based architecture and improved validation for JSON/multipart redaction.
- Test expansion: Added widget tests for
ISpectAppBar,EmptyLogsWidget,LogCard, andISpectBuilder; integration tests for the BLoC, Dio, and HTTP logging pipelines; and a comprehensiveISpectBlocObserverlifecycle/correlation suite. - Codecov: Integrated coverage reporting with a Flutter version matrix in CI and added a coverage badge to the README.
- GitHub Actions: Unified testing and analysis workflows.
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)