Bloc 扩展
包
| 包 | 版本 |
|---|---|
| action_bloc | |
| action_bloc_test | |
| flutter_action_bloc | |
| flutter_action_bloc_hooks | |
| flutter_bloc_hooks |
Bloc Hooks
Bloc Hooks 提供了一种简单的方式,可以在 `HookWidget` 和其他 hooks 中使用 bloc,而无需访问当前的 `BuildContext` 或使用 `BlocBuilder` 和 `BlocListener` 进行不必要的深度嵌套。
示例
class CounterText extends HookWidget {
@override
Widget build(BuildContext context) {
final counter = useBlocState<CounterCubit, int>();
return Text('$counter');
}
}
Action Blocs
ActionBloc 是带有额外 action 流(副作用)的 bloc。当使用密封类(例如与 freezed)作为状态时,副作用很难在状态内建模。此类副作用的示例包括显示错误消息或导航到另一个屏幕。
示例
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');
}
}
贡献
此存储库使用 melos 来管理所有包。要开始,请先安装 melos,然后运行其 bootstrap 命令。
dart pub global activate melos
melos bootstrap
有关 melos 的更多信息可以在 https://melos.invertase.dev 上找到。所有可用的脚本都可以在 melos.yaml 中查看。