corextra
Handy Dart extensions and utilities for Flutter — plus form validators, responsive helpers, logging, and an in-app DevTools panel.
Getting Started
Add the dependency:
dependencies:
corextra: ^1.2.9
Import it:
import 'package:corextra/corextra.dart';
Features
Extensions
- Null-safe checks:
.isNullOrEmptyonString?andList? - Safe conversions:
.toTryInt(),.toTryDouble(),.toTryBool() - String helpers:
.capitalize(),.toPascalCase(),.toCamelCase() - DateTime parsing and formatting
safeSetState— callssetState()only if the widget is still mounted
Form Validators
required,email,phone,otp,password,confirmPasswordminLength,maxLength,numeric,url,patternFormValidators.compose([...])— run several validators, return the first errorFormValidators.optional(validator)— skip validation when a non-required field is empty- Every validator accepts a custom
message: - Optional translations via
easy_localization
Responsive
ResponsiveBreakpoints—sm/md/lg/xl/xxlonBuildContextorBoxConstraintsdeviceType,isMobile,isTablet,isDesktopresponsive<T>(base: ..., md: ..., lg: ...)— pick a value per screen size, noLayoutBuilderneededscreenWidth,screenHeight,isPortrait,isLandscapeonBuildContext
Error Handling
CorextraException,CorextraCustomException,CorextraNetworkExceptionDioErrorHandler— turns Dio errors into clear, typed exceptions
Logging
debugLog— simple logger with levels (info/warning/error). Prints in debug builds and shows in the DevTools Logs tabAppLogger— structured logs for app events and Dio requestsAppLoggerInterceptor— pretty, color-coded Dio logs (turn off withenabled: false)CorextraSocketLogger— logs socket messages to the console and DevTools. See Socket Logging
Animation
FadeSlideTransition— fade + slide in fromtop,bottom,left,right, or acustomoffset
DevTools Panel
An in-app inspector, like Flutter DevTools but inside your app. No extra setup or connection needed.
MaterialApp(
builder: (context, child) =>
CorextraDevToolsOverlay(child: child ?? const SizedBox.shrink()),
home: const HomeScreen(),
)
dio.interceptors.add(const CorextraDevToolsInterceptor());
Tap the floating bubble to open the panel.
| Tab | What it shows |
|---|---|
| Network | Every HTTP request and socket message. Search and filter by method or status. |
| Logs | Every debugLog / AppLogger call. Search and filter by level. |
| Info | App and device details. |
| Performance (under More) | Live FPS chart with jank highlighting. |
In the Network tab:
- Headers, query params, and body each get their own tab
- JSON shows as a collapsible, color-coded tree
- Large bodies scroll inside their own box — drag along the edge to scroll, or tap the edge to jump
- Copy, Share, and Fullscreen buttons stay in view while you scroll
- Auth headers (
Authorization,Cookie, …) get a TOKEN badge. Hide their values on screen withhiddenHeaders— Copy still gives the real value
Good to know:
- Tap Minimize to shrink the panel into a small floating window
- Android's back button closes the panel step by step, without affecting your app
- On in debug builds, off in release. Change it anytime with
CorextraDevTools.instance.enabled = true
Coming later: widget inspector, memory snapshots, storage viewer, and route inspector.
Socket Logging
CorextraSocketLogger logs every socket message in two places:
- Console — a color-coded block per message (debug builds only)
- DevTools — a row in the Network tab (filter by Socket)
It works with any socket library (Socket.IO, WebSocket, etc.). Call it wherever you send or receive:
final logger = CorextraSocketLogger(url: socketUrl);
// Messages from the server
socket.onAny((event, [data]) => logger.receive(event, data));
socket.onConnectError((error) => logger.receive('connect_error', error, isError: true));
// Messages you send
logger.emit('chat:open', payload);
socket.emit('chat:open', payload);
// Messages you send and wait for a reply (ack)
final ack = await logger.emitWithAck(
'chat:latest_messages',
payload,
() => socket.timeout(15000).emitWithAckAsync('chat:latest_messages', payload),
);
Each row in DevTools shows the event name, EMIT (sent) or ON (received), and its status: OK, ERR, or pending while waiting for an ack.
| Option | Default | What it does |
|---|---|---|
consoleEnabled |
true |
Turn console logs on or off |
devToolsEnabled |
follows CorextraDevTools.instance.enabled |
Turn DevTools capture on or off |
captureBody |
true |
Save message data in DevTools |
maxBodyLength |
100000 |
Trims text messages longer than this |
Example
A runnable demo app, including the DevTools panel, lives in example/:
cd example
flutter pub get
flutter run
Libraries
- animation/fade_slide_transition
- corextra
- devtools/devtools_controller
- devtools/interceptors/corextra_devtools_interceptor
- devtools/models/frame_sample
- devtools/models/log_entry
- devtools/models/network_event
- devtools/overlay/corextra_devtools_overlay
- devtools/overlay/devtools_bubble
- devtools/overlay/devtools_floating_window
- devtools/overlay/draggable_floating_widget
- devtools/panel/back_handler_scope
- devtools/panel/devtools_panel
- devtools/panel/devtools_tabs
- devtools/panel/empty_state
- devtools/panel/scroll_to_top_fab
- devtools/panel/search_field
- devtools/panel/tabs/info_tab
- devtools/panel/tabs/logs_tab
- devtools/panel/tabs/network_tab
- devtools/panel/tabs/performance_tab
- devtools/util/devtools_theme
- devtools/util/memory_probe
- devtools/util/memory_probe_io
- devtools/util/memory_probe_stub
- devtools/util/pretty_json
- exceptions/corextra_exceptions
- extensions/date_time_extensions/nullable_date_time_extensions
- extensions/double_extensions/double_extensions
- extensions/int_extensions/int_extensions
- extensions/list_extensions/list_extensions
- extensions/responsive_extensions/responsive_constraints_extensions
- extensions/responsive_extensions/responsive_context_extensions
- extensions/state_extensions/state_extensions
- extensions/string_extensions/non_nullable_string_extensions
- extensions/string_extensions/nullable_string_extensions
- functions/validators
- logs/app_logger
- logs/debug_log
- logs/enum/log_color
- logs/enum/log_level
- network/app_logger_interceptor
- network/corextra_socket_logger
- network/dio_error_handler
- responsive/responsive_breakpoints
- validators/form_validators