From 052c22f1531c1cb82b67e2c79fabe01122ad2f3b Mon Sep 17 00:00:00 2001 From: Felix Angelov Date: Sat, 15 Jul 2023 14:01:20 -0500 Subject: [PATCH 1/2] feat(bricks): prompt for events and states --- bricks/bloc/__brick__/{{~ basic_bloc }} | 14 ++++++++++---- bricks/bloc/__brick__/{{~ basic_event }} | 5 +++++ .../bloc/__brick__/{{~ basic_on_event_no_events }} | 3 +++ .../__brick__/{{~ basic_on_event_with_events }} | 2 ++ bricks/bloc/__brick__/{{~ basic_state }} | 7 ++++++- bricks/bloc/brick.yaml | 10 +++++++++- bricks/bloc/hooks/pre_gen.dart | 5 +++++ 7 files changed, 40 insertions(+), 6 deletions(-) create mode 100644 bricks/bloc/__brick__/{{~ basic_on_event_no_events }} create mode 100644 bricks/bloc/__brick__/{{~ basic_on_event_with_events }} diff --git a/bricks/bloc/__brick__/{{~ basic_bloc }} b/bricks/bloc/__brick__/{{~ basic_bloc }} index 16f4128afb9..634252c12a9 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}}{{> basic_on_event_with_events }}{{/has_events}}{{^has_events}}{{> basic_on_event_no_events }}{{/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_on_event_no_events }} b/bricks/bloc/__brick__/{{~ basic_on_event_no_events }} new file mode 100644 index 00000000000..454169645ef --- /dev/null +++ b/bricks/bloc/__brick__/{{~ basic_on_event_no_events }} @@ -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__/{{~ basic_on_event_with_events }} b/bricks/bloc/__brick__/{{~ basic_on_event_with_events }} new file mode 100644 index 00000000000..b6d2964659e --- /dev/null +++ b/bricks/bloc/__brick__/{{~ basic_on_event_with_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__/{{~ basic_state }} b/bricks/bloc/__brick__/{{~ basic_state }} index 7c244d0ecd5..8a5b43434c8 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.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..db7e438d90a 100644 --- a/bricks/bloc/hooks/pre_gen.dart +++ b/bricks/bloc/hooks/pre_gen.dart @@ -2,8 +2,13 @@ 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 ?? 'state', + 'has_states': states.isNotEmpty, + 'has_events': events.isNotEmpty, 'use_basic': style == 'basic', 'use_equatable': style == 'equatable', 'use_freezed': style == 'freezed', From 125ca001fe030a0c10cacebca8b1dd9f8a9d26b3 Mon Sep 17 00:00:00 2001 From: Felix Angelov Date: Sun, 16 Jul 2023 23:32:47 -0500 Subject: [PATCH 2/2] equatable + freezed styles compat --- bricks/bloc/__brick__/{{~ basic_bloc }} | 2 +- bricks/bloc/__brick__/{{~ basic_state }} | 2 +- bricks/bloc/__brick__/{{~ equatable_bloc }} | 14 ++++++++++---- bricks/bloc/__brick__/{{~ equatable_event }} | 5 +++++ bricks/bloc/__brick__/{{~ equatable_state }} | 7 ++++++- bricks/bloc/__brick__/{{~ freezed_bloc }} | 14 ++++++++++---- bricks/bloc/__brick__/{{~ freezed_event }} | 4 +++- bricks/bloc/__brick__/{{~ freezed_on_events }} | 2 ++ bricks/bloc/__brick__/{{~ freezed_state }} | 4 +++- ...basic_on_event_no_events }} => {{~ on_event }}} | 0 ...ic_on_event_with_events }} => {{~ on_events }}} | 0 bricks/bloc/hooks/pre_gen.dart | 3 ++- 12 files changed, 43 insertions(+), 14 deletions(-) create mode 100644 bricks/bloc/__brick__/{{~ freezed_on_events }} rename bricks/bloc/__brick__/{{{~ basic_on_event_no_events }} => {{~ on_event }}} (100%) rename bricks/bloc/__brick__/{{{~ basic_on_event_with_events }} => {{~ on_events }}} (100%) diff --git a/bricks/bloc/__brick__/{{~ basic_bloc }} b/bricks/bloc/__brick__/{{~ basic_bloc }} index 634252c12a9..c752897526f 100644 --- a/bricks/bloc/__brick__/{{~ basic_bloc }} +++ b/bricks/bloc/__brick__/{{~ basic_bloc }} @@ -5,7 +5,7 @@ part '{{name.snakeCase()}}_state.dart'; class {{name.pascalCase()}}Bloc extends Bloc<{{name.pascalCase()}}Event, {{name.pascalCase()}}State> { {{name.pascalCase()}}Bloc() : super(const {{name.pascalCase()}}{{initial_state.pascalCase()}}()) { - {{#has_events}}{{> basic_on_event_with_events }}{{/has_events}}{{^has_events}}{{> basic_on_event_no_events }}{{/has_events}} + {{#has_events}}{{> on_events }}{{/has_events}}{{^has_events}}{{> on_event }}{{/has_events}} }{{#has_events}} {{#events}} Future _on{{name.pascalCase()}}{{..pascalCase()}}( diff --git a/bricks/bloc/__brick__/{{~ basic_state }} b/bricks/bloc/__brick__/{{~ basic_state }} index 8a5b43434c8..02bb6dafc1a 100644 --- a/bricks/bloc/__brick__/{{~ basic_state }} +++ b/bricks/bloc/__brick__/{{~ basic_state }} @@ -1,6 +1,6 @@ part of '{{name.snakeCase()}}_bloc.dart'; -{{#has_states}}sealed{{/has_states}} class {{name.pascalCase()}}State { +{{#has_states}}sealed {{/has_states}}class {{name.pascalCase()}}State { const {{name.pascalCase()}}State(); } {{#states}} 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__/{{~ basic_on_event_no_events }} b/bricks/bloc/__brick__/{{~ on_event }} similarity index 100% rename from bricks/bloc/__brick__/{{~ basic_on_event_no_events }} rename to bricks/bloc/__brick__/{{~ on_event }} diff --git a/bricks/bloc/__brick__/{{~ basic_on_event_with_events }} b/bricks/bloc/__brick__/{{~ on_events }} similarity index 100% rename from bricks/bloc/__brick__/{{~ basic_on_event_with_events }} rename to bricks/bloc/__brick__/{{~ on_events }} diff --git a/bricks/bloc/hooks/pre_gen.dart b/bricks/bloc/hooks/pre_gen.dart index db7e438d90a..8c36321c2ce 100644 --- a/bricks/bloc/hooks/pre_gen.dart +++ b/bricks/bloc/hooks/pre_gen.dart @@ -6,7 +6,8 @@ Future run(HookContext context) async { final events = context.vars['events'] as List; context.vars = { ...context.vars, - 'initial_state': states.firstOrNull ?? 'state', + 'initial_state': + states.firstOrNull ?? style == 'freezed' ? 'initial' : 'state', 'has_states': states.isNotEmpty, 'has_events': events.isNotEmpty, 'use_basic': style == 'basic',