Bloc 扩展


版本
action_bloc pub
action_bloc_test pub
flutter_action_bloc pub
flutter_action_bloc_hooks pub
flutter_bloc_hooks pub

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 中查看。

GitHub

查看 Github