corextra

Handy Dart extensions and utilities for Flutter — plus form validators, responsive helpers, logging, and an in-app DevTools panel.

pub package


Getting Started

Add the dependency:

dependencies:
  corextra: ^1.2.9

Import it:

import 'package:corextra/corextra.dart';

Features

Extensions

  • Null-safe checks: .isNullOrEmpty on String? and List?
  • Safe conversions: .toTryInt(), .toTryDouble(), .toTryBool()
  • String helpers: .capitalize(), .toPascalCase(), .toCamelCase()
  • DateTime parsing and formatting
  • safeSetState — calls setState() only if the widget is still mounted

Form Validators

  • required, email, phone, otp, password, confirmPassword
  • minLength, maxLength, numeric, url, pattern
  • FormValidators.compose([...]) — run several validators, return the first error
  • FormValidators.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 / xxl on BuildContext or BoxConstraints
  • deviceType, isMobile, isTablet, isDesktop
  • responsive<T>(base: ..., md: ..., lg: ...) — pick a value per screen size, no LayoutBuilder needed
  • screenWidth, screenHeight, isPortrait, isLandscape on BuildContext

Error Handling

  • CorextraException, CorextraCustomException, CorextraNetworkException
  • DioErrorHandler — 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 tab
  • AppLogger — structured logs for app events and Dio requests
  • AppLoggerInterceptor — pretty, color-coded Dio logs (turn off with enabled: false)
  • CorextraSocketLogger — logs socket messages to the console and DevTools. See Socket Logging

Animation

  • FadeSlideTransition — fade + slide in from top, bottom, left, right, or a custom offset

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 with hiddenHeaders — 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