nano_core 1.0.7 copy "nano_core: ^1.0.7" to clipboard
nano_core: ^1.0.7 copied to clipboard

A lightweight reactive architecture framework and design system toolkit for Flutter multiplatform applications.

Changelog #

All notable changes to the nano_core project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

1.0.7 - 2026-09-15 #

Added #

  • Dynamic URL Pattern Matching & Deep Linking:
    • NanoRouter now natively compiles and matches declarative dynamic route patterns with parameter tokens (e.g. /users/:id, /docs/*filepath).
    • Automatic parsing of URI query parameters (e.g. /users/42?tab=reviews&page=1) seamlessly accessible through NanoRouteArgs.
    • Typed helper methods added to NanoRouteArgs: pathParam(), queryParam(), queryParamInt(), queryParamBool(), queryParamDouble(), with automatic fallback in get<T>().
    • NanoDetailsRoute<Args> automatically extracts dynamic path parameters into typed view parameters when in-memory arguments are omitted.

1.0.6 - 2026-09-14 #

Added #

  • NanoShimmer & NanoShimmerDirection: Native wave gradient animation widget powered by Flutter's built-in ShaderMask and AnimatedBuilder (zero external dependencies, fully compatible with Flutter >=3.10.0, light & dark theme adaptive, isolated directional enum).
  • NanoSkeleton Design System: Structural loading placeholders with presets (.grid(), .list(), .card()), geometric primitives (.box(), .circle(), .text()), and GPU-accelerated ghost masking (.mask()).
  • NanoPaginatedListView Integration: Elevated default loading view from CircularProgressIndicator to NanoSkeleton.list() while fully preserving loadingWidget for custom overrides (100% backward-compatible).

1.0.5 - 2026-09-13 #

Breaking Changes #

  • NanoValidator: Replaced permissive dynamic message parameters with strongly-typed String message across all validator methods (required, email, minLength, maxLength, min, max, pattern, match, cpf, cnpj, cpfOrCnpj, creditCard, creditCardExpiration, creditCardCvv).
  • NanoValidatorFunction<Value>: Updated signature from dynamic Function(Value? value) to String? Function(Value? value), aligning 1:1 with Flutter's standard FormFieldValidator<T>.

Added #

  • Native Brazilian Document Validators:
    • NanoValidator.cnpj: Upgraded to support the new alphanumeric CNPJ specification (Receita Federal IN RFB nΒΊ 2.229/2024) alongside legacy numeric CNPJs, utilizing ASCII-offset Modulo 11 math with check digit verification.
    • NanoValidator.cpfOrCnpj: Universal single-field validator dynamically routing to CPF (11 digits) or CNPJ (14 characters) based on stripped character length.
  • Credit Card & Payment Form Validators:
    • NanoValidator.creditCard: Credit card number validator utilizing the Luhn algorithm (Modulo 10 checksum) with automatic whitespace/hyphen tolerance and configurable length boundaries (default 13–19 digits).
    • NanoValidator.creditCardExpiration: Expiration date validator supporting MM/YY and MM/YYYY formats with strict month checking (1–12), automatic expiration calculation, and optional referenceDate provider for deterministic unit testing.
    • NanoValidator.creditCardCvv: Security code validator supporting 3-digit and 4-digit (Amex) CVVs with configurable length boundaries.
  • Dedicated Validation Patterns & Constants:
    • NanoValidatorConstants: Centralized, semantic length and weight constants (cpfLength, cnpjLength, creditCardMinLength, creditCardMaxLength, etc.).
    • NanoValidatorRegex: Public pre-compiled regular expressions (email, digitsOnly, numericCnpj, alphanumericCnpj, creditCardExpiration, etc.) for zero-allocation performance and custom validator reuse.

1.0.4 - 2026-09-11 #

Added #

  • Native Decoupled Telemetry & Observability Architecture:
    • Pure Dart/Flutter contracts for analytics and crash reporting with zero external package coupling (NanoAnalyticsObserver, NanoCrashObserver, and central dispatcher NanoTelemetry).
    • NanoAnalyticsObserver: Standardized observer contract for automated screen tracking (onScreenView), custom business events (onEvent), user identification (setUserId), and persistent user properties (setUserProperty).
    • NanoCrashObserver: Standardized error observer contract for reporting handled and unhandled crashes (recordError), diagnostic breadcrumbs (log), custom runtime keys (setCustomKey), and user identification (setUserId).
    • NanoTelemetry Dispatcher & Facade: Multiplexing dispatcher capable of broadcasting events across multiple analytics and crash providers simultaneously (e.g. Firebase Analytics, Crashlytics, Sentry, Datadog, Mixpanel).
    • Automated Anti-Cardinality Screen Tracking: Integrated NanoRouteObserver with automatic PageRoute detection, tracking canonical route templates or names while preserving dynamic parameters separately to prevent dashboard cardinality explosion.
    • Automatic Global Error Wiring in NanoApp: Automatically connects FlutterError.onError and PlatformDispatcher.instance.onError directly to NanoTelemetry.recordError(..., fatal: true) whenever crash observers are configured.
    • Single-Line Catch Ergonomics: NanoTelemetry.recordError(...) reports errors remotely while printing formatted console diagnostics via NanoLogger.error by default (debugPrint: true).
    • Centralized Dependency Injection: NanoDefaultInjections registers analyticsObservers and crashObservers with zero boilerplate into GetIt.
    • Smart Repository Telemetry: NanoRepository._safeParse reports real serialization and adapter bugs (TypeError, FormatException) to recordError while recording common operational network failures (offline, 401, timeouts) as non-polluting diagnostic breadcrumbs (NanoTelemetry.log).

1.0.3 - 2026-09-09 #

Added #

  • Swift Package Manager (SPM) Support (iOS & macOS):
    • Official Swift Package Manager manifests (ios/nano_core/Package.swift and macos/nano_core/Package.swift) conforming to modern Flutter SPM plugin specifications.
    • Native Apple plugin sources organized into standard SPM structures (ios/nano_core/Sources/nano_core/ and macos/nano_core/Sources/nano_core/).
    • Dual-support architecture preserving CocoaPods compatibility alongside Swift Package Manager.
  • Dynamic Podspec Version Resolution:
    • Upgraded ios/nano_core.podspec and macos/nano_core.podspec to dynamically resolve version directly from pubspec.yaml.

1.0.2 - 2026-09-09 #

Added #

  • Full 6-Platform Flutter Plugin Support:
    • Expanded plugin platform coverage to all 6 supported Flutter platforms: Android, iOS, macOS, Web, Windows, and Linux.
    • Native macOS plugin implementation (macos/Classes/NanoCorePlugin.swift and macos/nano_core.podspec) resolving application version directly from Bundle.main.infoDictionary.
    • Multiplatform Dart plugin class (NanoCorePlugin) providing unified registration entrypoints for Web and Desktop environments.
    • Automatic zero-config resolution of Flutter Web version.json in NanoAppInfo.getVersion().

1.0.1 - 2026-09-09 #

Added #

  • NanoPoweredBy Branding Component: Lightweight, customizable branding and organization attribution widget designed for navigation drawers, footers, settings, and about dialogs (companyName, optional prefix, version, logo, onTap, isCompact, companyTextStyle, prefixTextStyle, versionTextStyle, and custom alignment).
  • NanoAppInfo Runtime Metadata Utility: Zero-dependency utility to dynamically resolve application version and build metadata at runtime (NanoAppInfo.getVersion(), cachedVersion, setVersion(), reset()). Employs a resilient dual-layer architecture with native platform channel resolution and silent fallback to pubspec.yaml asset.
  • Flutter Plugin Architecture (NanoCorePlugin):
    • Native Android platform channel implementation (NanoCorePlugin.kt) reading application version directly from PackageManager.getPackageInfo.
    • Native iOS platform channel implementation (NanoCorePlugin.swift) reading application version directly from Bundle.main.infoDictionary.
    • Platform integration configurations via android/ and ios/ (nano_core.podspec).
  • Direct get_it Export: Re-exported package:get_it/get_it.dart directly from package:nano_core/nano_core.dart to streamline dependency injection setup across client applications.

1.0.0 - 2026-09-06 #

Added #

  • Official 1.0.0 Framework Milestone: Complete, production-grade reactive architecture and multiplatform design system toolkit for Flutter.
  • AI & Remote Model Context Protocol (MCP) Ecosystem: Native integration with the official nano-core-mcp server.
  • 4 Specialized AI Personas:
    • πŸ§™β€β™‚οΈ nano-architect: Designs clean architecture blueprints, state machines, form controllers (NanoFormController), pagination (NanoPaginator), and scaffold routing.
    • πŸ›‘οΈ nano-migration-master: Conducts step-by-step framework version upgrades, resolves breaking changes, and refactors deprecated APIs.
    • πŸ” nano-reviewer: Audits Flutter code for controller memory leaks, NanoResult error handling, and lint rules.
    • πŸ§ͺ nano-qa: Generates unit and widget tests with full coverage and mock bindings.
  • Zero-Hallucination Upgrade Matrix: Real-time calculated migration playbooks across all 15 releases (0.0.1 to 1.0.0).
  • Universal Safety Guardrails: Strict 3-Phase Workflow protecting codebases from unauthorized modifications.

0.9.1 - 2026-09-05 #

Deprecated #

  • NanoNavigationExtension legacy helpers: context.toTab(...), context.toSubView(...), context.closeSubView(), and context.currentTab<T>() are now deprecated in favor of context.shell.* methods with zero breaking changes for existing codebases.

Added #

  • NanoRouteBase: Abstract base contract for all declarative router definitions (NanoRoute, NanoShellRoute, NanoProtectedRoute, NanoGroupRoute, NanoRedirectRoute). Unifies route handling across the framework, enabling polymorphic route grouping, modular feature route lists, and allowing NanoProtectedRoute to guard both standard routes and full multi-tab NanoShellRoute definitions.
  • NanoShellRoute: Declarative shell route for NanoRouter that decouples routing configuration from UI layouts via builder: (context, controller, body) => Widget, enabling clean page wrappers (HomePage), bottom navigation bars, floating action docks, and desktop sidebars without leaking Scaffold parameters into router tables.
  • NanoRouter shells: Dedicated parameter on NanoRouter to register persistent shell routes (List<NanoShellRoute>) alongside standard routes (List<NanoRouteBase>).
  • NanoShellContext & context.shell: Dedicated, clean BuildContext namespace for shell navigation and state queries (context.shell.selectTab(...), context.shell.openSubView(...), context.shell.closeSubView(), context.shell.isSubViewOpen(), context.shell.currentTab<T>(), and context.shell.activeSubView<T>()).
  • Unregistered Tab & Sub-View Debug Assertions: NanoShellScaffold now asserts with actionable error messages when attempting to navigate to an unregistered tab or sub-view enum, eliminating silent fallbacks to index 0 during development.

0.9.0 - 2026-09-04 #

Added #

  • NanoShellScaffold, NanoShellTab, and NanoShellSubView: Zero-dependency persistent navigation shell scaffold managing primary tabs with keep-alive (maintainState), optional contextual sub-views (e.g. notifications/search overlays), persistent floating action buttons, drawers, headers, and automatic back-gesture handling (enablePopScope).
  • NanoShellController, NanoShell.of(context), and NanoNavigationExtension helpers (context.toTab(...), context.toSubView(...), context.closeSubView(), context.currentTab<T>()): Fluid BuildContext navigation extension to seamlessly switch shell tabs and open/close sub-views without requiring StatefulWidget or manual setState.
  • NanoScaffold & NanoScaffoldBuilder: floatingActionButtonLocation parameter to customize the positioning of the floating action button (e.g. FloatingActionButtonLocation.centerFloat).

0.8.0 - 2026-09-04 #

Breaking Changes #

  • NanoAuthRepository: Removed required endpoint parameter from the constructor to allow provider-specific and action-specific URLs. Renamed tokenKey and refreshTokenKey to tokenStorageKey and refreshTokenStorageKey (along with defaultTokenStorageKey = 'auth.access_token' and defaultRefreshTokenStorageKey = 'auth.refresh_token') for clear semantic distinction between local storage keys and API payload keys.
  • NanoLogLevel: Removed legacy numeric priority field in favor of declarative set-based level filtering via NanoLogFilter.

Added #

  • NanoLogFilter: Granular, type-safe log level filtering with built-in presets (.all(), .none(), .onlyErrors(), .errorsAndWarnings(), .onlyHttp(), and .only(...)).
  • NanoLogger.init(...): Centralized initialization method with named parameters for filter, enabled, showTimestamp, showColors, maxStackTraceLines, customPrinter, and onError telemetry hooks.
  • NanoLogger.setFilter(...): Dynamic runtime log filter switcher.
  • NanoLogger.enable() / NanoLogger.disable(): Expressive helpers to activate/deactivate logger output.
  • NanoLogger.mute() / NanoLogger.unmute(): Semantic aliases for disable() and enable().
  • NanoLogger.reset(): Resets all global logger configurations back to their default state.
  • NanoEnvironment.getDouble(key, {defaultValue}): Strongly-typed compile-time double parser from --dart-define with fallback.
  • NanoEnv: Ultra-concise typedef alias for NanoEnvironment.
  • NanoPkce: Cryptographically secure OAuth 2.0 PKCE generator conforming to RFC 7636 (codeVerifier, codeChallenge, state, nonce, .generate(), .createChallenge(), and .randomString()).
  • NanoPkceMethod: Supported PKCE code challenge algorithm methods (.s256 and .plain).
  • NanoOAuthGrantType: Enumeration of the 5 industry-standard OAuth 2.0 grant types (authorizationCode, refreshToken, password, clientCredentials, deviceCode).
  • NanoOAuthCallback: Safe OAuth redirect and deep link parser with anti-CSRF state validation (.fromUri(), .fromUrl(), isSuccess, isValidState()).
  • NanoOAuth: Central utility to construct standardized authorization URLs and token exchange request payloads across all OAuth grant types with zero external dependencies.

Fixed #

  • NanoScaffold: Fixed reactive state observation by triggering setState(() {}) in _onStateChanged with mounted check, ensuring layouts properly rebuild and dismiss loading overlays when the controller emits new states.

0.7.0 - 2026-09-03 #

Breaking Changes #

  • NanoReadAdapter: Subclasses now implement abstract fromMap(Map<String, dynamic> map) for pure dictionary mapping. The framework provides safe dynamic fromMapOrNull(dynamic map) (returning Entity?) and fromList(dynamic jsonList).
  • NanoWriteAdapter: Subclasses now implement abstract toMap(Entity entity) for dictionary serialization, with built-in toList(List<Entity>? list).
  • NanoAdapter: Refactored to combine NanoReadAdapter (fromMap) and NanoWriteAdapter (toMap).
  • NanoRepository: getAll(...) now returns Future<NanoPaginatedResult<Entity>> instead of Future<List<Entity>>. Entities can be accessed via result.items or direct indexing (result[0], result.length, result.isEmpty).
  • NanoSearchRepository: searchAll(...) now returns Future<NanoPaginatedResult<Entity>> instead of Future<List<Entity>>.
  • NanoController: initialState is now a required named parameter (NanoController({required ViewState initialState})), ensuring controllers never operate with uninitialized null states and powering the type-safe native viewState getter. Subclasses should pass super.initialState = const MyViewState().
  • NanoFormController: initialState is now a required named parameter (NanoFormController({required super.initialState})), replacing the previous initialData.
  • SuccessState: Changed constructor from positional SuccessState(data) to named parameters SuccessState({this.key, this.data}) and transition toSuccess({key, data}). Use LoadedState(data) for general loaded data without triggering feedback toasts.
  • NanoScaffold: onCustomSuccess callback signature changed from void Function(String message)? to strongly typed void Function(MessageKey? success)? for consistency with onCustomError and onCustomWarning.
  • NanoQueryAdapter: Removed in favor of NanoWriteAdapter with toMap(query) to unify all Dart-to-Map / serialization operations.
  • NanoSearchRepository: queryAdapter now accepts a NanoWriteAdapter<Query> calling toMap(query) for query parameters serialization.
  • NanoViewState: Made List<Object?> get props an abstract member, enforcing explicit property declarations across all NanoViewState implementations for value equality.
  • NanoRepository: Removed redundant fetchList method in favor of the unified getAll(...) method.
  • NanoSearchRepository: Renamed search(...) to searchAll(...) for naming consistency with getAll(...).

Added #

  • NanoPaginatedResult: Encapsulates strongly typed entity lists alongside pagination metadata (totalCount, currentPage, totalPages, hasNext, nextCursor, and meta).
  • NanoDataStrategy: Configurable response extraction strategy supporting un-enveloped raw arrays (.raw()), JSON:API / Laravel envelopes (.data()), Django REST (.results()), Google Cloud APIs (.items()), custom keys (.key('custom')), and custom extractors (.custom(...)).
  • NanoPaginationMeta: Public model for extracted pagination metadata from JSON payloads or HTTP headers.
  • NanoDefaultInjections: Added dataStrategy parameter for application-wide response strategy configuration.
  • CustomState: Added CustomState<T, Payload> and toCustom<Payload>(payload) transition to allow arbitrary domain events, statuses, or semantic state extensions.
  • NanoController: Added emitCustom<Payload>(payload, {data}) helper method for triggering custom domain states and side-effects.
  • NanoController: Added native viewState getter to access current strongly typed view state without requiring local mutable variables.
  • InitialState: Added optional data parameter to initialize and preserve initial view state models, along with toInitial({data}) transition.
  • NanoController: Added convenience state emitting methods emitInitial({data}), emitLoaded(data), emitLoading({data}), emitSuccess({key, data}), emitError({key, data}), emitWarning({key, data}), and emitCustom(payload).
  • NanoScaffold: Added listener callback (void Function(BuildContext, NanoState<ViewState>)) for side-effects such as navigation, dialogs, and analytics.
  • NanoAuthRepository: Added refreshSession() method to standardize token renewals using stored refreshToken.
  • NanoScaffold: Added defaultErrorMessage and defaultWarningMessage parameters for fallback notification messages, and ensured empty messages never display blank toast cards.
  • NanoState: Subclasses now extend NanoEquatable with value equality on data and key payloads.
  • NanoEntity: Made id optional (final ID? id; with const NanoEntity({this.id});) for enhanced flexibility with nested sub-entities, drafts, and value models.
  • NanoInjections: Added support for asynchronous dependency bindings (FutureOr<void> binds(GetIt i)) with automatic scope and singleton resolution.
  • NanoMapExtension: Added .add(key, value) and .addIf(key, value, {condition, skipEmpty}) extensions on Map<String, dynamic> for fluent, conditional, and null/empty-safe map construction.
  • NanoReadAdapter: Interface for read-only deserialization (fromMap) with built-in safe dynamic parser (fromMapOrNull(dynamic map)) and list deserialization (fromList(dynamic jsonList)).
  • NanoWriteAdapter: Interface for write-only serialization (toMap) with built-in list serialization (toList(List<Entity>? list)).
  • NanoAdapter: Refactored to implement both NanoReadAdapter and NanoWriteAdapter for bidirectional models.
  • NanoRepository: Accepts NanoReadAdapter for read-only endpoints without requiring unused toMap, with optional NanoWriteAdapter for write operations; automatically unwraps both raw lists and nested data maps ({"data": [...]}).

0.6.0 - 2026-09-02 #

Breaking Changes #

  • NanoAuthRepository: Uses NanoStorage instead of NanoCache for non-volatile token persistence.
  • NanoController: init(String? id) is now an abstract method requiring explicit implementation across all controllers extending NanoController.
  • NanoCommand: NanoCommand0.run() is now parameterless and NanoCommand1.run(arg) accepts only the action argument; callbacks (onSuccess, onError) and emitLoadingOnRequest are now configured declaratively at creation time.
  • NanoCommand: Renamed execute(...) to run(...) for triggering encapsulated actions with automatic toLoaded transition.
  • NanoState: Added LoadedState<T> to the sealed class hierarchy (requires handling LoadedState in exhaustive pattern matching switch expressions).

Added #

  • NanoStorage: Standardized contract for durable key-value persistence without TTL expiration.
  • LoadedState<T> and toLoaded(data) to NanoState hierarchy for regular data-ready states without triggering feedback toasts.
  • onSuccess and onError optional callbacks to NanoController.execute.
  • emitLoadingOnRequest parameter (defaults to true) to NanoController.execute for customizable loading emissions.
  • Generic execute<T> in NanoController returning typed results directly into onSuccess(T result).
  • NanoController: Added nanoCommand0 and nanoCommand1 factory methods for creating encapsulated commands with declarative callbacks and automatic lifecycle disposal.
  • Granular customizable endpoint methods in NanoRepository (endpointGetAll, endpointGetById, endpointCreate, endpointUpdate, endpointDelete, fetchList) and NanoSearchRepository (endpointSearch).
  • NanoAuthRepository<Session>: Standardized base authentication repository for session restoration, token persistence (saveToken, clearSession, isAuthenticated), and lifecycle management.
  • NanoAuthInterceptor: Out-of-the-box HTTP interceptor for automatic Bearer token injection using NanoAuthRepository as the single source of truth, path exclusion, and automatic 401 handling.
  • NanoInjections: Added callable call() invocation allowing await const AppInjections()() and automatic GetIt.allReady() resolution without manual boilerplate.
  • NanoDefaultInjections: Added storage and authRepository parameters to init, register, and binds for automatic container registration.
  • NanoEnvironment: Utility with compile-time environment flags (isProduction, isDevelopment, isProfile), --dart-define variable getters, and automatic execution mode detection.
  • NanoHttpClient: Added constructor interceptors parameter for declarative pipeline registration at initialization.

Changed #

  • NanoScaffold: Success state transitions no longer automatically display default text toasts from ViewState models.

0.5.0 - 2026-09-01 #

Added #

  • NanoDebouncer: Flexible async execution delay for search inputs, autocomplete, and live filters with native NanoTextField(debounceDuration: ...) integration.
  • NanoConnectivity & NanoConnectivityStatus: Zero-dependency cross-platform reactive network monitor supporting Wi-Fi, Cellular (4G/5G), Ethernet, Bluetooth, VPN, and Offline states.
  • connectivity registration support in NanoDefaultInjections.init and NanoDefaultInjections.register.

Changed #

  • Clean Code Generics Refactor: Standardized descriptive and semantic generic type parameters across all classes and adapters (ViewState, MessageKey, Entity, Id, Query, Success, Failure, FormEntity, Args, Output, PageWidget).
  • Simplified NanoScaffold layout slots into unified builders (header, drawer, footer, floatingActionButton, builder).
  • Integrated NanoConnectivity observation and custom connectivityBuilder directly into NanoScaffold.
  • Enforced strict arrow function syntax (=>) for all single-line methods across the framework.

0.5.0 (2026-09-01) #

  • Clean Code Generics Refactor: Standardized descriptive and semantic generic type parameters across all classes and adapters (ViewState, MessageKey, Entity, Id, Query, Success, Failure, FormEntity, Args, Output, PageWidget).
  • NanoDebouncer: Flexible async execution delay for search inputs, autocomplete, and live filters with native NanoTextField(debounceDuration: ...) integration.
  • NanoConnectivity & NanoConnectivityStatus: Zero-dependency cross-platform reactive network monitor supporting Wi-Fi, Cellular (4G/5G), Ethernet, Bluetooth, VPN, and Offline states.
  • Simplified NanoScaffold layout slots into unified builders (header, drawer, footer, floatingActionButton, builder).
  • Integrated NanoConnectivity observation and custom connectivityBuilder directly into NanoScaffold.
  • Added connectivity registration support to NanoDefaultInjections.init and NanoDefaultInjections.register.
  • Enforced strict arrow function syntax (=>) for all single-line methods across the framework.

0.4.0 - 2026-08-31 #

Added #

  • NanoDefaultInjections: Central default dependency injection container with NanoDefaultInjections.init(i, client: ..., pagination: ..., cache: ...) and register() helpers for framework-level services.
  • NanoCache, NanoCachePolicy & NanoMemoryCache: Built-in zero-dependency caching layer with configurable policies (cacheFirst, networkFirst, networkOnly, cacheOnly), TTL expiration, and automatic cache invalidation on mutations.
  • NanoResult, NanoSuccess & NanoFailure: Functional result pattern using Dart 3 sealed class hierarchy with compile-time pattern matching, fold, map, mapError, and runAsync safe execution helpers.
  • NanoFormEntity, NanoFormState & NanoFormController: Strongly-typed immutable form state management system with copyWith, updateForm lifecycle, and reactive state emissions.
  • NanoValidator: Rich collection of chainable form validators (required, email, minLength, maxLength, min, max, pattern, match, cpf, cnpj, custom) with dynamic BuildContext internationalization (i18n) support.
  • NanoAutoValidateMode: Granular validation trigger modes (onSubmit, onUserInteraction, onFocusLost, always, disabled).
  • NanoTextField: Reactive text field UI component with automatic controller/focus synchronization, password visibility toggle, and localized error rendering.
  • NanoPagination, NanoOffsetPagination & NanoCursorPagination: Universal pluggable pagination contracts for Offset/Page-based and Cursor/Token-based strategies.
  • NanoPaginator: Stateful pagination controller managing page progression, accumulated items, and async page lifecycle.
  • NanoPaginatedListView: Reactive component widget for automatic infinite scrolling, pull-to-refresh, bottom spinner loading, and empty/error state handling.
  • NanoPaginationBar: Reactive component navigation bar with next/previous page triggers, page indicators, and dynamic pageSize selector.
  • NanoQueryAdapter: Dedicated abstract contract for serializing strongly-typed query and filter models into URL query parameters without forcing unused JSON deserialization.
  • NanoSearchRepository: Specialized generic repository requiring a NanoQueryAdapter to perform type-safe query searches via search(Q query).

Changed #

  • Integrated pagination parameter into NanoRepository.getAll and NanoSearchRepository.search.
  • Made client parameter optional in NanoRepository and NanoSearchRepository with automatic fallback to GetIt.I<NanoHttpClient>().

0.3.0 - 2026-08-31 #

Added #

  • NanoRouteObserver: Dedicated navigation observer with granular callbacks (onRouteChange, onRoutePushed, onRoutePopped, onRouteReplaced, onRouteRemoved) for screen analytics, telemetry, and logging.
  • observers property on NanoRouter and automated observer forwarding in NanoApp.
  • NanoHttpInterceptor: Extensible contract for intercepting and mutating HTTP requests, responses, and handling errors (JWT injection, refresh tokens, retries).
  • NanoHttpRequest and NanoHttpError: Standardized immutable and equatable models for HTTP requests and structured network errors.
  • NanoHttpLogInterceptor: Ready-to-use HTTP traffic logger for requests, responses, headers, bodies, and exceptions in developer tools.
  • NanoLogger: Central structured logger with severity levels (debug, info, success, warning, error, http), ANSI terminal styling, method tracking, data payloads, and global telemetry hooks (onError, customPrinter).
  • NanoStateObservable: Universal abstract state contract allowing NanoScaffold to observe any state management approach (BLoC, Cubit, MobX, Signals, or custom ChangeNotifier adapters).
  • NanoStreamAdapter: Generic adapter bridging any Stream (BLoC, Cubit, RxDart, WebSockets) into NanoStateObservable.
  • NanoListenableAdapter: Generic adapter bridging any Listenable (MobX, Signals, ValueNotifier, ChangeNotifier) into NanoStateObservable.

Changed #

  • Decoupled NanoScaffold's controller parameter to accept any NanoStateObservable<T>.
  • Implemented NanoStateObservable<T> on NanoController<T>.

0.2.0 - 2026-08-30 #

Added #

  • NanoApp: Root application widget that automatically configures NanoRouter, MaterialApp, themes, and localizations.
  • Declarative routing architecture with NanoRouter, NanoRoute, NanoAnimatedRoute, NanoDetailsRoute, NanoGroupRoute, NanoProtectedRoute, NanoRedirectRoute, NanoPaths, NanoRouteArgs, NanoRouteCode, and NanoRouteError.
  • NanoAnimatedRoute: Predefined animated route transitions (fade, slideUp, slideRight, scale) and custom transitionBuilder support.
  • NanoProtectedRoute: Route guard wrapper with inheritance support protecting nested routes and redirecting unauthorized users.
  • NanoDetailsRoute<T>: Specialized typed detail routes with automated generic argument extraction.
  • NanoGroupRoute: Path-only route grouping without standalone page rendering.
  • NanoGuardedPage & NanoErrorPage: Dedicated widget classes for route guard evaluation and custom 404/error pages.
  • Navigation extensions on BuildContext (toNamed, toReplacementNamed, toAndRemoveUntilNamed, back, routeArgs).
  • NanoScaffoldBuilder & NanoScaffoldHeader: Dedicated presentation widget components replacing inline builder helper functions.
  • loadingWidget property on NanoScaffold and child on NanoLoadingOverlay for fully customizable loading states.
  • Modular NanoInjections composition support and pattern demonstration in example.

0.1.0 - 2026-08-29 #

Breaking Changes #

  • NanoController<T>: Now strictly enforces T extends NanoViewState. Primitive types (String, int, etc.) or arbitrary unbounded types are no longer permitted as state data models.
  • NanoScaffold<T, M>: Builder signature updated from Widget Function(BuildContext, Widget?) to Widget Function(BuildContext, NanoState<T>) allowing direct reactive state access. Added support for typed message keys M extends NanoMessageKey and dynamic builders (headerBuilder, footerBuilder, drawerBuilder, floatingActionButtonBuilder).
  • NanoStatePage<W, C>: Generic parameter for NanoInjections removed. injections is now an abstract getter NanoInjections get injections; with automatic GetIt scope initialization (initScope) and teardown (dropScope).

Added #

  • NanoHttpClient interface defining standardized HTTP client contracts.
  • NanoHttpResponse generic response model with NanoHttpResponseExtension helpers (isSuccess, isClientError, isServerError).
  • NanoHttpCode status code constants.
  • NanoAdapter abstract generic model adapter for JSON serialization and deserialization.
  • NanoEntity base generic entity with unique identifier and value equality.
  • NanoRepository base generic CRUD repository with automated serialization.
  • NanoViewState base class enforcing structured, equatable view state models for NanoController.

Removed #

  • NanoStateContent in favor of the standardized NanoViewState.

0.0.5 - 2026-08-27 #

Added #

  • GitHub repository link to header of example/lib/main.dart.
  • Full internationalization (l10n) support in example with flutter_localizations and intl.

Changed #

  • NanoMessageKey refactored to use String Function(BuildContext) get message instead of String get message to allow highly decoupled, on-demand localization via Context.
  • NanoState now defines key as a nullable NanoMessageKey?, removing the need for mandatory wrappers.
  • NanoScaffold and StateSimulatorCard updated to call message(context) and elegantly fallback when no key is provided.

0.0.4 - 2026-07-28 #

Added #

  • Strict linting rules in analysis_options.yaml (sort_constructors_first, sort_unnamed_constructors_first, lines_longer_than_80_chars, always_declare_return_types, prefer_single_quotes, and unawaited_futures).

Changed #

  • Constructors reordered across core classes to satisfy sort_constructors_first.
  • example/** directory excluded from strict documentation linting while preserving 100% strict Dartdoc enforcement on core lib/ package APIs.

0.0.3 - 2026-07-28 #

Added #

  • Complete explicit Dartdoc constructor documentation across NanoController, NanoLoadingOverlay, NanoScaffold, NanoStatePage, and NanoToast to pass pub.dev Pana analysis checks.
  • Showcase example app re-architected into clean modular feature layers following nano-budgets design (app/core/theme, app/pages/showcase/widgets).
  • Package metadata and README.md updated with active Beta status notice and badges.

Removed #

  • Unused lib/main.dart entrypoint from package core.

0.0.2 - 2026-07-24 #

Added #

  • NanoToast smart multiplatform notification component for Web, Desktop, and Mobile.
  • NanoDeviceType for robust platform and responsive screen environment detection.
  • warning state status and helpers (isWarning, toWarning()) in NanoState.
  • onCustomError, onCustomWarning, and onCustomSuccess callbacks to NanoScaffold.
  • homepage URL (https://nanodevs.com.br) in package metadata.
  • Comprehensive English Dartdoc documentation for all core APIs.

0.0.1 - 2026-07-24 #

Added #

  • Initial release of nano_core.
  • Reactive state management (NanoState, NanoController, NanoCommand).
  • Multiplatform layout scaffold (NanoScaffold).
  • Reusable design system components (NanoLoadingOverlay).
  • Dependency injection bindings (NanoInjections).
5
likes
160
points
1.22k
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

A lightweight reactive architecture framework and design system toolkit for Flutter multiplatform applications.

Homepage
Repository (GitHub)
View/report issues

Topics

#architecture #state-management #design-system #mcp #ai

License

MIT (license)

Dependencies

cupertino_icons, flutter, get_it

More

Packages that depend on nano_core

Packages that implement nano_core