bloc_signals_bloc 1.0.1
bloc_signals_bloc: ^1.0.1 copied to clipboard
Classic BLoC (package:bloc) interoperability adapters for BlocSignal state containers.
|
β‘ bloc_signals_bloc"With the rigor of BLoC and the flex and speed of Signals"
Bidirectional interoperability adapters and extensions connecting |
Supports both bloc 8.x and bloc 9.x out of the box.
π Ecosystem Packages #
The BlocSignal monorepo consists of 11 modular packages:
β‘ Key Features #
- π Bidirectional
classicBloc.toBlocSignal(): Convert any classicBlocinto aClassicBlocSignalexposing synchronous reactive signal reading (.stateValue/.state) and mutation via.add(event). - π Bidirectional
classicCubit.toBlocSignal(): Convert any classicCubitinto aClassicCubitSignalexposing typed.cubitmethod access alongside reactive signals. - β‘ Reverse
blocSignal.toClassicBloc()/.toClassicCubit(): Drop modern streamlessBlocSignalcontainers directly into legacyflutter_blocUI widgets (BlocBuilder,BlocListener,BlocConsumer,BlocSelector) with zero widget rewrites. - π― Eliminate Stream Delay: Provide instant, glitch-free synchronous UI rebuilds on classic Blocs without microtask queue latency.
- π Lifecycle & AutoClose: Configurable
autoClose: truefor clean scoped disposal.
π Getting Started #
Add bloc_signals_bloc to your pubspec.yaml:
dependencies:
bloc: ^8.1.0 # or ^9.0.0
bloc_signals: ^1.0.0
bloc_signals_bloc: ^1.0.0
π‘ Quick Examples #
1. Classic BLoC β BlocSignal (Bidirectional Read & Mutate) #
import 'package:bloc_signals_bloc/bloc_signals_bloc.dart';
final classicBloc = CounterBloc();
// Convert classic Bloc into a synchronous BlocSignal:
final blocSignal = classicBloc.toBlocSignal();
// 1. Synchronous reactive read:
print(blocSignal.stateValue);
// 2. Dispatch events directly through the signal container:
blocSignal.add(IncrementEvent());
2. Modern BlocSignal β Classic BLoC (Legacy UI Compatibility) #
import 'package:bloc_signals_bloc/bloc_signals_bloc.dart';
final modernBloc = ModernCounterBloc();
// Adapt modern BlocSignal into a classic Bloc for legacy widgets:
final classicAdapter = modernBloc.toClassicBloc();
// Consumed directly by legacy flutter_bloc widgets:
BlocBuilder<BlocSignalToClassicBloc<CounterEvent, int>, int>(
bloc: classicAdapter,
builder: (context, state) => Text('$state'),
);
π Lifecycle Semantics #
| Direction | Mechanism | Lifecycle Coupling |
|---|---|---|
Classic β BlocSignal ( toBlocSignal) |
Subscribes to bloc.stream and forwards state emissions. |
autoClose: false (default) keeps the classic Bloc open. autoClose: true closes the underlying classic Bloc when the adapter closes. |
BlocSignal β Classic ( toClassicBloc) |
Subscribes to blocSignal.state and emits classic stream events. |
autoClose: false (default) keeps the BlocSignal open. autoClose: true closes the BlocSignal when the classic adapter closes. |
π€ AI Coding Assistant Skill #
This package is supported by an official pre-packaged AI Coding Skill representing architectural best practices, migration patterns, and bidirectional state bridge rules for BlocSignal.