|
⚡ 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.
Libraries
- bloc_signals_bloc
- Classic BLoC (package:bloc) interoperability adapters for BlocSignal state containers.