diff --git a/bricks/bloc/__brick__/{{~ basic_bloc }} b/bricks/bloc/__brick__/{{~ basic_bloc }} index 16f4128afb9..c752897526f 100644 --- a/bricks/bloc/__brick__/{{~ basic_bloc }} +++ b/bricks/bloc/__brick__/{{~ basic_bloc }} @@ -4,9 +4,15 @@ part '{{name.snakeCase()}}_event.dart'; part '{{name.snakeCase()}}_state.dart'; class {{name.pascalCase()}}Bloc extends Bloc<{{name.pascalCase()}}Event, {{name.pascalCase()}}State> { - {{name.pascalCase()}}Bloc() : super(const {{name.pascalCase()}}State()) { - on<{{name.pascalCase()}}Event>((event, emit) { - // TODO: implement event handler - }); + {{name.pascalCase()}}Bloc() : super(const {{name.pascalCase()}}{{initial_state.pascalCase()}}()) { + {{#has_events}}{{> on_events }}{{/has_events}}{{^has_events}}{{> on_event }}{{/has_events}} + }{{#has_events}} + {{#events}} + Future _on{{name.pascalCase()}}{{..pascalCase()}}( + {{name.pascalCase()}}{{..pascalCase()}} event, + Emitter<{{name.pascalCase()}}State> emit, + ) async { + // TODO: handle {{name.pascalCase()}}{{..pascalCase()}}. } + {{/events}}{{/has_events}} } diff --git a/bricks/bloc/__brick__/{{~ basic_event }} b/bricks/bloc/__brick__/{{~ basic_event }} index af32933af91..07f3d840a83 100644 --- a/bricks/bloc/__brick__/{{~ basic_event }} +++ b/bricks/bloc/__brick__/{{~ basic_event }} @@ -3,3 +3,8 @@ part of '{{name.snakeCase()}}_bloc.dart'; sealed class {{name.pascalCase()}}Event { const {{name.pascalCase()}}Event(); } +{{#events}} +final class {{name.pascalCase()}}{{..pascalCase()}} extends {{name.pascalCase()}}Event { + const {{name.pascalCase()}}{{..pascalCase()}}(); +} +{{/events}} \ No newline at end of file diff --git a/bricks/bloc/__brick__/{{~ basic_state }} b/bricks/bloc/__brick__/{{~ basic_state }} index 7c244d0ecd5..02bb6dafc1a 100644 --- a/bricks/bloc/__brick__/{{~ basic_state }} +++ b/bricks/bloc/__brick__/{{~ basic_state }} @@ -1,5 +1,10 @@ part of '{{name.snakeCase()}}_bloc.dart'; -class {{name.pascalCase()}}State { +{{#has_states}}sealed {{/has_states}}class {{name.pascalCase()}}State { const {{name.pascalCase()}}State(); } +{{#states}} +final class {{name.pascalCase()}}{{..pascalCase()}} extends {{name.pascalCase()}}State { + const {{name.pascalCase()}}{{..pascalCase()}}(); +} +{{/states}} \ No newline at end of file diff --git a/bricks/bloc/__brick__/{{~ equatable_bloc }} b/bricks/bloc/__brick__/{{~ equatable_bloc }} index 99b33b2baf6..5598baa211a 100644 --- a/bricks/bloc/__brick__/{{~ equatable_bloc }} +++ b/bricks/bloc/__brick__/{{~ equatable_bloc }} @@ -5,9 +5,15 @@ part '{{name.snakeCase()}}_event.dart'; part '{{name.snakeCase()}}_state.dart'; class {{name.pascalCase()}}Bloc extends Bloc<{{name.pascalCase()}}Event, {{name.pascalCase()}}State> { - {{name.pascalCase()}}Bloc() : super(const {{name.pascalCase()}}State()) { - on<{{name.pascalCase()}}Event>((event, emit) { - // TODO: implement event handler - }); + {{name.pascalCase()}}Bloc() : super(const {{name.pascalCase()}}{{initial_state.pascalCase()}}()) { + {{#has_events}}{{> on_events }}{{/has_events}}{{^has_events}}{{> on_event }}{{/has_events}} + }{{#has_events}} + {{#events}} + Future _on{{name.pascalCase()}}{{..pascalCase()}}( + {{name.pascalCase()}}{{..pascalCase()}} event, + Emitter<{{name.pascalCase()}}State> emit, + ) async { + // TODO: handle {{name.pascalCase()}}{{..pascalCase()}}. } + {{/events}}{{/has_events}} } diff --git a/bricks/bloc/__brick__/{{~ equatable_event }} b/bricks/bloc/__brick__/{{~ equatable_event }} index b91551f60b7..f458ad90fcf 100644 --- a/bricks/bloc/__brick__/{{~ equatable_event }} +++ b/bricks/bloc/__brick__/{{~ equatable_event }} @@ -6,3 +6,8 @@ sealed class {{name.pascalCase()}}Event extends Equatable { @override List get props => []; } +{{#events}} +final class {{name.pascalCase()}}{{..pascalCase()}} extends {{name.pascalCase()}}Event { + const {{name.pascalCase()}}{{..pascalCase()}}(); +} +{{/events}} \ No newline at end of file diff --git a/bricks/bloc/__brick__/{{~ equatable_state }} b/bricks/bloc/__brick__/{{~ equatable_state }} index d07588b5a17..c8afcc6778e 100644 --- a/bricks/bloc/__brick__/{{~ equatable_state }} +++ b/bricks/bloc/__brick__/{{~ equatable_state }} @@ -1,8 +1,13 @@ part of '{{name.snakeCase()}}_bloc.dart'; -class {{name.pascalCase()}}State extends Equatable { +{{#has_states}}sealed {{/has_states}}class {{name.pascalCase()}}State extends Equatable { const {{name.pascalCase()}}State(); @override List get props => []; } +{{#states}} +final class {{name.pascalCase()}}{{..pascalCase()}} extends {{name.pascalCase()}}State { + const {{name.pascalCase()}}{{..pascalCase()}}(); +} +{{/states}} \ No newline at end of file diff --git a/bricks/bloc/__brick__/{{~ freezed_bloc }} b/bricks/bloc/__brick__/{{~ freezed_bloc }} index 28d48622436..177724818e1 100644 --- a/bricks/bloc/__brick__/{{~ freezed_bloc }} +++ b/bricks/bloc/__brick__/{{~ freezed_bloc }} @@ -6,9 +6,15 @@ part '{{name.snakeCase()}}_state.dart'; part '{{name.snakeCase()}}_bloc.freezed.dart'; class {{name.pascalCase()}}Bloc extends Bloc<{{name.pascalCase()}}Event, {{name.pascalCase()}}State> { - {{name.pascalCase()}}Bloc() : super(const {{name.pascalCase()}}State.initial()) { - on<{{name.pascalCase()}}Event>((event, emit) { - // TODO: implement event handler - }); + {{name.pascalCase()}}Bloc() : super(const {{name.pascalCase()}}State.{{initial_state.camelCase()}}()) { + {{#has_events}}{{> freezed_on_events }}{{/has_events}}{{^has_events}}{{> on_event }}{{/has_events}} + }{{#has_events}} + {{#events}} + Future _on{{name.pascalCase()}}{{..pascalCase()}}( + _{{..pascalCase()}} event, + Emitter<{{name.pascalCase()}}State> emit, + ) async { + // TODO: handle {{name.pascalCase()}}{{..pascalCase()}}. } + {{/events}}{{/has_events}} } diff --git a/bricks/bloc/__brick__/{{~ freezed_event }} b/bricks/bloc/__brick__/{{~ freezed_event }} index e093b87bdbe..742dcd56eb7 100644 --- a/bricks/bloc/__brick__/{{~ freezed_event }} +++ b/bricks/bloc/__brick__/{{~ freezed_event }} @@ -2,5 +2,7 @@ part of '{{name.snakeCase()}}_bloc.dart'; @freezed class {{name.pascalCase()}}Event with _${{name.pascalCase()}}Event { - const factory {{name.pascalCase()}}Event.started() = _Started; + {{^has_events}}const factory {{name.pascalCase()}}Event.started() = _Started;{{/has_events}}{{#events}} + const factory {{name.pascalCase()}}Event.{{..camelCase()}}() = _{{..pascalCase()}}; + {{/events}} } diff --git a/bricks/bloc/__brick__/{{~ freezed_on_events }} b/bricks/bloc/__brick__/{{~ freezed_on_events }} new file mode 100644 index 00000000000..efa18aa03e3 --- /dev/null +++ b/bricks/bloc/__brick__/{{~ freezed_on_events }} @@ -0,0 +1,2 @@ +// Register Event Handlers{{#events}} + on<_{{..pascalCase()}}>(_on{{name.pascalCase()}}{{..pascalCase()}});{{/events}} \ No newline at end of file diff --git a/bricks/bloc/__brick__/{{~ freezed_state }} b/bricks/bloc/__brick__/{{~ freezed_state }} index bea1eaf7c0b..5735d9b6d8e 100644 --- a/bricks/bloc/__brick__/{{~ freezed_state }} +++ b/bricks/bloc/__brick__/{{~ freezed_state }} @@ -2,5 +2,7 @@ part of '{{name.snakeCase()}}_bloc.dart'; @freezed class {{name.pascalCase()}}State with _${{name.pascalCase()}}State { - const factory {{name.pascalCase()}}State.initial() = _Initial; + {{^has_states}}const factory {{name.pascalCase()}}State.initial() = _Initial;{{/has_states}}{{#states}} + const factory {{name.pascalCase()}}State.{{..camelCase()}}() = _{{..pascalCase()}}; + {{/states}} } diff --git a/bricks/bloc/__brick__/{{~ on_event }} b/bricks/bloc/__brick__/{{~ on_event }} new file mode 100644 index 00000000000..454169645ef --- /dev/null +++ b/bricks/bloc/__brick__/{{~ on_event }} @@ -0,0 +1,3 @@ +on<{{name.pascalCase()}}Event>((event, emit) { + // TODO: implement event handler + }); \ No newline at end of file diff --git a/bricks/bloc/__brick__/{{~ on_events }} b/bricks/bloc/__brick__/{{~ on_events }} new file mode 100644 index 00000000000..b6d2964659e --- /dev/null +++ b/bricks/bloc/__brick__/{{~ on_events }} @@ -0,0 +1,2 @@ +// Register Event Handlers{{#events}} + on<{{name.pascalCase()}}{{..pascalCase()}}>(_on{{name.pascalCase()}}{{..pascalCase()}});{{/events}} \ No newline at end of file diff --git a/bricks/bloc/brick.yaml b/bricks/bloc/brick.yaml index 37fae25e4b2..5d0e7bf250a 100644 --- a/bricks/bloc/brick.yaml +++ b/bricks/bloc/brick.yaml @@ -4,7 +4,7 @@ version: 0.3.0 repository: https://github.com/felangel/bloc/tree/master/bricks/bloc environment: - mason: ">=0.1.0-dev.32 <0.1.0" + mason: ">=0.1.0-dev.50 <0.1.0" vars: name: @@ -21,3 +21,11 @@ vars: - basic - equatable - freezed + events: + type: list + description: The supported bloc events. + prompt: What events will the bloc handle (increment, decrement)? + states: + type: list + description: The supported bloc states. + prompt: What states will the bloc emit (loading, success, failure)? diff --git a/bricks/bloc/hooks/pre_gen.dart b/bricks/bloc/hooks/pre_gen.dart index 10577ea295a..8c36321c2ce 100644 --- a/bricks/bloc/hooks/pre_gen.dart +++ b/bricks/bloc/hooks/pre_gen.dart @@ -2,8 +2,14 @@ import 'package:mason/mason.dart'; Future run(HookContext context) async { final style = context.vars['style']; + final states = context.vars['states'] as List; + final events = context.vars['events'] as List; context.vars = { ...context.vars, + 'initial_state': + states.firstOrNull ?? style == 'freezed' ? 'initial' : 'state', + 'has_states': states.isNotEmpty, + 'has_events': events.isNotEmpty, 'use_basic': style == 'basic', 'use_equatable': style == 'equatable', 'use_freezed': style == 'freezed',