A collections of packages providing additional functionality for working with bloc.
Package | Version |
---|---|
action_bloc | |
action_bloc_test | |
flutter_action_bloc | |
flutter_action_bloc_hooks | |
flutter_bloc_hooks |
Bloc hooks provide an easy way to use blocs from HookWidget
s and other hooks without needing to access the current BuildContext
or unnecessary deep nesting using BlocBuilder
s
and BlocListener
s.
class CounterText extends HookWidget {
@override
Widget build(BuildContext context) {
final counter = useBlocState<CounterCubit, int>();
return Text('$counter');
}
}
ActionBloc
s are bloc with an additional stream for actions (side effects). When using sealed classes (for example with freezed) as state side effects cannot easily be modeled
inside the state. Examples for such side effects include showing error messages or navigating to another screen.
class CounterCubit extends ActionCubit<int, String> {
CounterCubit() : super(0);
void increment() {
emit(state + 1);
if (state % 15 == 0) {
emitAction('FizzBuzz');
} else if (state % 5 == 0) {
emitAction('Buzz');
} else if (state % 3 == 0) {
emitAction('Fizz');
}
}
}
class CounterText extends HookWidget {
const CounterText({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
final counter = useBlocState<CounterCubit, int>();
useBlocActionListener<CounterCubit, String>((context, action) {
final snackBar = SnackBar(
content: Text(action),
);
ScaffoldMessenger.of(context).showSnackBar(snackBar);
});
return Text('$counter');
}
}
This repository uses melos for managing all packages. To get started first install melos and then run its bootstrap
command.
dart pub global activate melos
melos bootstrap
More information about melos can be found on https://melos.invertase.dev. All available scripts can be seen in melos.yaml
.