blocx_core 1.2.1
blocx_core: ^1.2.1 copied to clipboard
Pure-Dart composable BLoC architecture with mixins and use-cases for paginated collections, reactive forms, and cross-feature event synchronization.
Changelog #
1.2.1 - 2026-10-11 #
Documentation #
- Corrected outdated class and method names throughout
README.md(refreshPageUseCaseTask/refreshPageCursorTask,setFilter/getFilter,highlightedItemIds,expandedItemIds,BlocxCollectionEventAddItem,stepIndex/maxStep,FakePaginatedSource, full mixin names). - Added automated
tool/check_readme.dartvalidation in CI to prevent referencing nonexistent symbols in documentation.
Infrastructure #
- Transitioned GitHub Actions release automation to a token-free model using
workflow_dispatchon tags without requiring personal access tokens.
1.2.0 - 2026-10-10 #
Fixed #
- Fixed stuck
isLoadingNextPagewhenloadGenerationincrements during an in-flight pagination request (F1 / K1):nextLoadGeneration()now always clearsisLoadingNextPage = falseand signals bottom loader completion. - Fixed local pagination offset drift when entities are inserted or removed locally (F2 / K2): introduced
_localOffsetDeltatracking withnoteLocalInsert(),noteLocalRemoval(), andadjustOffsetForLocalChanges()across initial load, next page, search, and refresh. - Accounted for appended items in local pagination offset drift tracking (C-B): extended
noteLocalInsertwithbool isAppendedto ensure items appended to the tail of the list do not shift pagination fetch offsets. - Fixed duplicate entity insertions in
insertToList()(F3 / K3): bulk inserts now checkidentifieragainst existing items and replace existing matches in-place while inserting new items at the target position. - Optimized
insertToListdeduplication to $O(N + M)$ linear time (C-G): indexed existing collection items byidentifierin a hash map before merging new items. - Guarded
searchNextPageagainst redundant in-flight triggers (F5 / K5): now verifies!hasReachedEnd && !isLoadingNextPage, tracksisLoadingNextPagewith a generation-safetry/finally, and verifies search guards when delegating fromloadNextPage. - Concurrency and event transformers for
BlocxFormCoreMixin(F4 / K4): registeredInitwithrestartable(),UpdateDatawithsequential(),Submitwithdroppable(),UpdateFormDatawithrestartable(), andSyncFormDatawithsequential(); guardedinitFormagainst cancelled emissions (if (emit.isDone) return). - Stepped form navigation boundary guards (C-D): guarded
goToNextStep,goToPreviousStep, andgoToStepinBlocxFormSteppedMixinagainst invalid or out-of-bounds step transitions. - Pruned removed item states on deletion (C-E): added
pruneItemState(identifier)removing deleted entities fromselectedItemIds,beingSelectedItemIds,highlightedItemIds, andexpandedItemIdsacrossremoveItemFromListandremoveFromList. - Guarded unique field availability checks (C-F): in
BlocxFormCoreMixin._checkUniqueValue, evaluated the unique-field task before emitting pending state or assigning in-flight tokens, preventing dangling validation tokens when no task is configured. - Localized delete confirmation and failure snackbars (F6 / K6, C-E): added default getters
itemDeleted,itemDeleteFailed,itemsDeleted,itemsDeleteFailed,itemsDeletedPartially,selectItemFailed, anddeselectItemFailedtoBlocXLocalizations, and updateddeletion/mixin.dartandselection/mixin.dartto use localized strings.
Added #
- Added
reportError(Object error, StackTrace? stackTrace)hook toBlocxBaseBloc(F7 / K7): called automatically fromhandleErrorbefore UI translation, allowing subclasses to forward unhandled errors to crash reporting services (such as Sentry or Firebase Crashlytics) without coupling to UI layers. - Documented error monitoring best practices across
BlocxBaseBlocandBlocxBaseUseCase.
Infrastructure & Testing #
- Resolved static analysis warnings on Dart stable (C-A): corrected dead code branches and deprecated member usages.
- Strengthened invariant test suite (C-C): expanded randomized fuzzing invariants across seeds 1 through 30 for collection ordering, deduplication, and pagination integrity.
- Replaced arbitrary test sleep waits with deterministic synchronization (C-H): converted all real
Future.delayedsleeps in collection and form tests topumpEventQueue(),Completer, orfakeAsync. - Configured GitHub Actions CI/CD workflows (
ci.yml,release.yml,publish.yml) supporting OIDC automated pub.dev publishing on release tag push.
1.1.0 - 2026-10-10 #
Added #
- Added
clearError()toScreenManagerCubitandBlocxBaseBloc, which emitsScreenManagerCubitStateInitial(shouldRebuild: true)to dismiss full-page errors and restore normal screen display without resurrecting error states on subsequent snackbars. - Added cursor-based pagination support with
BlocxPage.nextCursor,BlocxCursorPaginatedInput,BlocxCursorPaginatedUseCase,BlocxCursorPaginatedUseCaseTask, and datasource cursor tracking (nextCursor) inBlocxCollectionCoreMixinandBlocxCollectionInfiniteMixin. - Added
sortComparatorand sort-aware item insertion (getInsertIndexForItem) toBlocxCollectionCoreMixinandBlocxCollectionSyncStreamMixinto preserve ordered placement of newly created or synced items. - Added per-bloc injectable
errorTranslatorandlocalizationsconstructor parameters and getters toBlocxBaseBloc,BlocxCollectionBloc, andBlocxFormBloc, falling back toBlocxErrorTranslator.instanceandBlocXLocalizations.localizations. - Added
searchingTextandsearchHintkeys toBlocXLocalizationswith default implementations. - Added
package:blocx_core/testing.dartexporting test utilities: in-memoryBlocxTestEventHub,BlocxTestEntity,BlocxTestFormEntity,FakePaginatedSource,FakePaginatedUseCase,FakeCursorPaginatedUseCase,FakeSearchUseCase,FakeUseCase, and task construction helpers.
Fixed #
- Fixed cursor pagination end-of-list detection: a missing or empty
nextCursoris now treated as the end of list (hasReachedEnd == true), preventing infinite refetches of page 1 whenitems.length == limit. Added guard in_fetchNextPageWithCursorwhen cursor is missing. - Fixed pull-to-refresh throwing
UnimplementedErroron cursor-only collection blocs: addedrefreshPageCursorTaskand_fetchRefreshPageWithCursortoBlocxCollectionRefreshableMixin.
Changed #
- Raised the minimum Dart SDK to 3.8.0, which is what the dependency constraints (bloc 9 etc.) already required.
1.0.1 - 2026-10-09 #
Documentation #
- Recorded baseline test and analysis results in
docs/fix-notes.md. - Aligned
BlocxBaseEntitydocumentation and examples to accurately reflect that entity matching, deduplication, and sync operate via the contractualidentifiergetter, while Dartoperator ==andhashCoderemain standardObjectidentity unless overridden by subclasses. - Corrected
resolveCommandEntities(input, output)signature inREADME.mdto reflect the 2-parameter signature in source. - Updated
BlocxCollectionSearchableMixindoc descriptions inblocx_collection_bloc.dartto clarify that search filters the active collection list in-place rather than maintaining a disconnected secondary list.
Infrastructure & Testing #
- Added GitHub Actions CI workflow (
.github/workflows/ci.yml) covering formatting, static analysis (--fatal-infos), tests with coverage, and dry-run publishing across SDK matrix (3.5.0andstable). - Added
bloc_testandfake_asyncdev dependencies and test harness fixtures intest/helpers/(fake use cases, paginated source, entity models). - Added comprehensive multi-mixin combination test suite (
test/collection/collection_combination_test.dart) exercising the flagship combination of Infinite, Refreshable, Searchable, Selectable, Deletable, and SyncStream mixins working together. - Replaced arbitrary
Future.delayedsleeps in existing collection and form tests with reactive stream synchronization.
Fixed #
- Fixed initial load failure leaving collection state stuck in
Loadingforever; now emitsBlocxCollectionStateErrorwith translated error message while keeping existing list and status flags intact. - Added
readableErrorOfhelper onBlocxBaseBlocto centralize readable error translation. - Ensured
isLoadingNextPage,isRefreshing, andisSearchingflags and states are consistently reset and emitted on failure paths. - Fixed
BlocxCollectionInfiniteMixinto emitisLoadingNextPage: trueupon fetch initiation and reset tofalseupon page arrival/completion, keeping state snapshots synchronized with bloc status. - Prevented emitted states from aliasing live mutable lists and identifier sets by emitting true unmodifiable snapshots (
List<Entity>.unmodifiableandSet<String>.unmodifiable), eliminating retroactive state mutations. - Decoupled pagination offset (
offsetandsearchOffset) from local list length (list.length) by tracking datasource-loaded counts (_loadedCountand_searchLoadedCount), preventing pagination offset drift when entities are added or deleted locally via sync streams or user actions. - Prevented stale-response race conditions by introducing a monotonically incrementing
loadGenerationcounter and registeringBlocxCollectionEventLoadInitialPageandBlocxCollectionEventRefreshDatawithrestartable(), andBlocxCollectionEventLoadNextPagewithdroppable(), safely discarding out-of-order in-flight responses across initial load, pagination, refresh, and search. - Added in-place deduplication to
addItemandinsertToListSingle: if an item with matchingidentifieralready exists in the collection, it is updated in-place rather than inserted as a duplicate entry. - Isolated entity resolution and EventHub event broadcasting within
BlocxBaseUseCase.execute(input)in a dedicatedtry/catchwith ahandleBroadcastErrorhook, ensuring that exceptions thrown during post-execution broadcasting never cause a successful persistent business operation to return aBlocxUseCaseFailure. - Optimized
BlocxSimpleEventHub.emitto captureStackTrace.currentconditionally inside an assert block (assert(() { event.debugTrace ??= StackTrace.current; return true; }())), eliminating expensive stack trace capture overhead in release builds while preserving diagnostics in debug/test environments. - Enhanced
BlocxSimpleEventHub.onEntity<T>to support heterogeneous entity batches usingentities.any((item) => item is T)andwhereType<T>(), and preserved original eventidandcreatedAttimestamps when re-wrapping typedBlocxEntityEvents.
1.0.0 #
Added #
- Command-Driven EventHub & Automatic UseCase Broadcasting
- Added
BlocxCommandType(create,read,update,delete) andBlocxEntityEvent<T extends BlocxBaseEntity>(containingentities,command,origin,debugTrace, and a convenienceentitygetter). - Updated
BlocxEventHubandBlocxSimpleEventHubwithemitEntity<T>,emitEntities<T>, and typedonEntity<T>({Iterable<BlocxCommandType>? commands})stream filtering. - Updated
BlocxBaseUseCase,BlocxPaginatedUseCase, andBlocxSearchUseCaseconstructors to accept optionaleventHub,commandType, andcommandTypes. - Automatic entity broadcasting on UseCase success:
BlocxBaseUseCase.execute(input)now automatically resolves affectedBlocxBaseEntityinstances viaresolveCommandEntities(input, output, command)(extracting fromOutput,BlocxPage<Output>,Iterable<BlocxBaseEntity>, orInputwhencommand == BlocxCommandType.delete) and emitsBlocxEntityEvents toeventHub. - Defaulted
BlocxPaginatedUseCaseandBlocxSearchUseCasetoBlocxCommandType.read. - Added overridable
shouldBroadcastCommandResult(input, output)hook onBlocxBaseUseCase.
- Added
- Live Collection Stream Synchronization (
BlocxCollectionSyncStreamMixin)- Enhanced
BlocxCollectionSyncStreamMixin<T, P>to automatically subscribe toeventHub.onEntity<T>(commands: listenedCommandTypes)as well as customentityEventsStreamsandentitiesStream. - Added command-aware handlers (
onStreamEntitiesCreate,onStreamEntitiesUpdate,onStreamEntitiesRead,onStreamEntitiesDelete),shouldSyncEntity(entity, command)filter hook,insertCreatedEntitiesAtStartflag, andupdateOnlyExistingOnReadflag. - Exported
BlocxCollectionSyncStreamMixinfrompackage:blocx_core/collection_bloc.dart.
- Enhanced
- Live Form Stream Synchronization (
BlocxFormSyncStreamMixin)- Added
BlocxFormSyncStreamMixin<F, P, E, WatchedEntity>(exported frompackage:blocx_core/form_bloc.dart) to synchronize open forms when a watched entity is updated/read/created viaBlocxEventHubor custom streams (isWatchedEntity,mapSyncedEntityToFormData,applySyncedDataToControllers,validateAfterSync). - Added automatic screen pop support (
popOnEntityDeletedandonWatchedEntityDeleted) when the watched entity is deleted. - Added
BlocxFormEventSyncFormData<F>andhandleSyncFormDataEventtoBlocxFormCoreMixin, plusinitStreams()andcloseStreams()lifecycle hooks onBlocxFormBloc.
- Added
- Listener Helper on
BlocxEventHubMixin- Added
entityEventsOfType<T extends BlocxBaseEntity>({Iterable<BlocxCommandType>? commands})toBlocxEventHubMixin.
- Added
- Bundled AI Agent Skill (
skills/blocx-core)- Added a comprehensive
blocx-coreAI coding skill (SKILL.mdandreferences/) for agentic IDEs.
- Added a comprehensive
- Runnable Package Example (
example/blocx_core_example.dart)- Added a complete runnable pure-Dart example showcasing
BlocxBaseEntity,BlocxPaginatedUseCase,BlocxEventHub,BlocxCollectionBloc, andBlocxFormBloc.
- Added a complete runnable pure-Dart example showcasing
Changed #
- Full Web & WASM Platform Compatibility
- Removed the unused
loggerdependency (which transitively importeddart:io), enabling 100% Web and WASM runtime compatibility across all 6 target platforms.
- Removed the unused
- Strict Unidirectional EventHub Architecture
- Removed
emitSystemWideEventfromBlocxEventHubMixin. OnlyBlocxBaseUseCasesubclasses emit app/domain events;BlocxBaseBlocandBlocxEventHubMixinare strictly listeners.
- Removed
- Documentation Overhaul
- Rebuilt
README.mdwith concise architecture diagrams, side-by-side comparisons, liveBlocxEventHubsynchronization examples, and cross-references toflutter_blocx.
- Rebuilt
Fixed #
- Safe Collection Item Insertion & Update (
BlocxCollectionCoreMixin)addItem(BlocxCollectionEventAddItem) now clampsevent.indexto[0, list.length]instead of throwing aRangeErrorwhen out of bounds.updateItem(BlocxCollectionEventUpdateItem) now safely returns a no-op when the item's identifier is not present in the current list instead of throwing an unhandledException.
- Collection Pull-to-Refresh Limit (
BlocxCollectionRefreshableMixin)- Fixed
refreshData(BlocxCollectionEventRefreshData) to requestlimititems instead oflist.length, ensuring consistent pagination page sizes after refreshing.
- Fixed
0.9.0 #
Fixed #
-
Form submission validation
- Added full-form validation before submit hooks and use case execution.
- Blocked submit use case execution when validation errors exist.
- Blocked submission while required form info is loading.
- Blocked submission while unique-field validation is still running.
- Preserved
FormValidationModebehavior during submit, init, and field-update validation.
-
Form validation behavior
-
Updated
BlocxFormValidationMixinso:nonedisables validation.onSubmitvalidates the full form only on submit/full-validation requests.onUserInteractionvalidates changed fields while editing and the full form on submit.alwaysvalidates the full form on every update and submit.
-
Fixed field-level validation so validating one field no longer clears errors from unrelated fields.
-
-
Timed form errors
- Fixed timed field errors so timers dispatch clear events instead of reusing an old
Emitter. - Added timer cleanup when clearing errors.
- Added timer cleanup when
BlocxFormBloccloses.
- Fixed timed field errors so timers dispatch clear events instead of reusing an old
-
Unique-field validation
- Updated unique-field checks to use the new typed
BlocxUseCaseTask<Input, Output>API. - Awaited form updates after successful unique checks.
- Preserved stale-response protection through per-field request tokens.
- Forwarded use case stack traces to
handleError.
- Updated unique-field checks to use the new typed
-
Pagination & Collection Tests
- Fixed
BlocxPage.hasNextto compare returned item count against the requestedlimit. - Replaced the old
loadCountfield withlimit. - Fixed
BlocxCollectionBlocinitial page test limit configuration.
- Fixed
Changed #
-
Use case task typing
-
Changed
BlocxUseCaseTaskfrom use-case-class/input typing to input/output typing:- Before:
BlocxUseCaseTask<UseCase, Input> - After:
BlocxUseCaseTask<Input, Output>
- Before:
-
Added
execute()toBlocxUseCaseTaskso callers no longer manually calltask.useCase.execute(task.inputBuilder()).
-
-
Paginated task typing
-
Changed
BlocxPaginatedUseCaseTaskto use input/output typing:BlocxPaginatedUseCaseTask<Input extends BlocxPaginatedInput, Output extends BlocxBaseEntity>
-
Added
execute(offset: ..., limit: ...)to centralize paginated task execution.
-
-
Paginated input naming
- Renamed
BlocxPaginatedInputtoBlocxPaginatedInput. - Renamed the source file/export from
blocx_pagination_use_case.darttoblocx_paginated_use_case.dart. - Updated
BlocxSearchInputto extendBlocxPaginatedInput.
- Renamed
-
Form core mixin
- Replaced
BlocxFormDataMixinwithBlocxFormCoreMixin. - Removed the raw
FormSubmitTasktypedef. - Added stronger dartdocs for form initialization, update, validation, submission, payload handling, and submit hooks.
- Replaced
-
Form info fetching
- Updated
BlocxFormInfoFetcherMixin.requiredInitialInfoTasksto useMap<E, BlocxUseCaseTask<Object?, Object?>>. - Updated info-fetch execution to call
task.execute(). - Improved docs and immutable views for fetched info/loading state.
- Updated
-
Collection pagination mixins
- Updated collection core, infinite, refreshable, and searchable mixins to use
BlocxPaginatedUseCaseTask<Input, Output>. - Updated initial load, next-page load, refresh, search pagination, and search refresh to call
task.execute(...). - Improved error messages when required pagination/search tasks are missing.
- Cleared the existing list before applying initial-load and refresh results.
- Updated collection core, infinite, refreshable, and searchable mixins to use
-
Collection action mixins
-
Updated delete behavior to use task factories:
deleteItemTask(item)deleteMultipleItemsTask(items)
-
Added
performDeleteItem(item)fallback for custom delete implementations. -
Updated selection sync to use task factories:
selectItemTask(item)deselectItemTask(item)
-
Added rollback handling for failed remote selection and deselection sync.
-
Improved typed selection-change events and empty multi-select guards.
-
-
Public exports
- Exported
BlocxFormValidatorfromform_bloc.dart. - Exported additional non-string validator groups from
form_bloc.dart. - Updated
list_bloc.dartto exportblocx_paginated_use_case.dart.
- Exported
-
Documentation
- Expanded dartdocs across form core, form errors, validation, info fetching, unique-field validation, collection core, pagination, refresh, search, selection, deletion, page model, and use case task APIs.
Migration Guide #
Replace BlocxPaginatedInput with BlocxPaginatedInput
// Before
class GetUsersInput extends BlocxPaginatedInput {
const GetUsersInput({
required super.limit,
required super.offset,
});
}
// After
class GetUsersInput extends BlocxPaginatedInput {
const GetUsersInput({
required super.limit,
required super.offset,
});
}
Update paginated use case imports
// Before
import 'package:blocx_core/src/blocs/collection/use_cases/blocx_pagination_use_case.dart';
// After
import 'package:blocx_core/src/blocs/collection/use_cases/blocx_paginated_use_case.dart';
Prefer the public barrel when possible:
import 'package:blocx_core/list_bloc.dart';
Update normal use case tasks
// Before
BlocxUseCaseTask<CreateUserUseCase, CreateUserInput>(
useCase: createUserUseCase,
inputBuilder: () => CreateUserInput(...),
);
// After
BlocxUseCaseTask<CreateUserInput, UserEntity>(
useCase: createUserUseCase,
inputBuilder: () => CreateUserInput(...),
);
Update form submit tasks
@override
BlocxUseCaseTask<CreateAccountInput, AccountResponse> get submitUseCaseTask {
return BlocxUseCaseTask<CreateAccountInput, AccountResponse>(
useCase: createAccountUseCase,
inputBuilder: () {
return CreateAccountInput(
email: formData.email,
password: formData.password,
);
},
);
}
Update paginated collection tasks
@override
BlocxPaginatedUseCaseTask<GetUsersInput, UserEntity>? get paginationTask {
return BlocxPaginatedUseCaseTask<GetUsersInput, UserEntity>(
useCase: getUsersUseCase,
inputBuilder: (offset, limit) {
return GetUsersInput(
offset: offset,
limit: limit,
);
},
);
}
Update search tasks
@override
BlocxPaginatedUseCaseTask<BlocxSearchInput, UserEntity>? get searchUseCaseTask {
return BlocxPaginatedUseCaseTask<BlocxSearchInput, UserEntity>(
useCase: searchUsersUseCase,
inputBuilder: (offset, limit) {
return BlocxSearchInput(
searchText: searchText,
offset: offset,
limit: limit,
);
},
);
}
Update delete mixins
// Before
@override
BlocxBaseUseCase<UserEntity, bool>? get deleteItemUseCase {
return deleteUserUseCase;
}
// After
@override
BlocxUseCaseTask<DeleteUserInput, bool>? deleteItemTask(UserEntity item) {
return BlocxUseCaseTask<DeleteUserInput, bool>(
useCase: deleteUserUseCase,
inputBuilder: () {
return DeleteUserInput(id: item.id);
},
);
}
Update selection sync mixins
@override
BlocxUseCaseTask<SelectUserInput, bool>? selectItemTask(UserEntity item) {
return BlocxUseCaseTask<SelectUserInput, bool>(
useCase: selectUserUseCase,
inputBuilder: () {
return SelectUserInput(id: item.id);
},
);
}
@override
BlocxUseCaseTask<DeselectUserInput, bool>? deselectItemTask(UserEntity item) {
return BlocxUseCaseTask<DeselectUserInput, bool>(
useCase: deselectUserUseCase,
inputBuilder: () {
return DeselectUserInput(id: item.id);
},
);
}
0.8.3 #
Fixed #
- Improved package stability by fixing public exports, collection state copying, and initial search pagination behavior.
Changed #
- Updated documentation and migration guidance to reflect the current
BlocxCollectionBloc, task-based use case APIs, renamed infinite-list internals, and0.8.3usage.
0.8.2 #
- Updated CHANGELOG.md
0.8.1 #
Changed #
-
README terminology alignment
- Renamed documentation references from
BaseEntitytoBlocxBaseEntity. - Renamed documentation references from
BlocxPaginationUseCasetoBlocxPaginatedUseCase. - Updated examples and code snippets to use the current API naming.
- Simplified the collection mixins capability table and removed outdated
init*()references.
- Renamed documentation references from
-
BlocxPaginatedUseCaseTasktype constraints- Tightened generic bounds to require a
BlocxPaginatedUseCase<Input, dynamic>instead of a genericBlocxBaseUseCase, improving compile-time type safety and ensuring task/use-case compatibility.
- Tightened generic bounds to require a
0.8.0 #
Added #
-
BlocxPaginatedUseCaseTask— new task class that pairs a paginatedBlocxPaginatedUseCasewith aPaginationInputBuilder, receiving the currentlimitandoffsetat execution time. This is the standard task type forBlocxCollectionBloc.paginationTaskand supports per-operation overrides vialoadInitialPageTask. -
BaseBlocdocumentation — comprehensive dartdoc covering:- Internal
ScreenManagerCubitownership (consumers no longer need to construct or pass one). - Error handling via
handleErroranderrorDisplayPolicy(snackbar by default, overridable to full-page). - Navigation via
pop. - Custom error presentation via
BlocxErrorTranslatorregistered at app startup.
- Internal
-
InputBuildertype alias — replaces the inline function type inBlocxUseCaseTask, improving readability and reuse.
Changed #
-
Mixin export naming — list (
list_bloc.dart): removed_blocsegment from all collection mixin export paths for a flatter, consistent naming scheme:blocx_collection_bloc_infinite_mixin→blocx_collection_infinite_mixinblocx_collection_bloc_selectable_mixin→blocx_collection_selectable_mixinblocx_list_bloc_sync_stream_mixin→blocx_collection_sync_stream_mixinblocx_collection_bloc_deletable_mixin→blocx_collection_deletable_mixinblocx_collection_bloc_expandable_mixin→blocx_collection_expandable_mixinblocx_collection_bloc_highlightable_mixin→blocx_collection_highlightable_mixinblocx_collection_bloc_refreshable_mixin→blocx_collection_refreshable_mixinblocx_collection_bloc_scrollable_mixin→blocx_collection_scrollable_mixinblocx_collection_bloc_searchable_mixin→blocx_collection_searchable_mixin
-
Mixin export naming — form (
form_bloc.dart): standardised exports to theblocx_form_*prefix pattern:blocx_info_fetcher_form_mixin→blocx_form_info_fetcher_mixinblocx_stepped_form_mixin→blocx_form_stepped_mixin
-
Model export rename (
form_bloc.dart):base_form_entity.dart→blocx_base_form_entity.dart
-
BlocxUseCaseTaskdocs — condensed and clarified; class-level doc now explains lazyinputBuilderevaluation; inline field comments tightened.
Migration Guide #
List mixin imports
Update any direct imports of the renamed mixin files:
// Before
import 'package:blocx_core/src/blocs/collection/mixins/blocx_collection_bloc_infinite_mixin.dart';
// After
import 'package:blocx_core/src/blocs/collection/mixins/blocx_collection_infinite_mixin.dart';
The same pattern applies to all other renamed list mixins listed above.
Form mixin & model imports
// Before
import 'package:blocx_core/src/blocs/form/mixins/blocx_info_fetcher_form_mixin.dart';
import 'package:blocx_core/src/core/models/base_form_entity.dart';
// After
import 'package:blocx_core/src/blocs/form/mixins/blocx_form_info_fetcher_mixin.dart';
import 'package:blocx_core/src/core/models/blocx_base_form_entity.dart';
0.7.1 prior release #
See repository history for earlier entries.