Skip to content

Commit 45456cb

Browse files
committed
fix field bloc states equality
1 parent 4ea5625 commit 45456cb

File tree

10 files changed

+108
-95
lines changed

10 files changed

+108
-95
lines changed

packages/flutter_form_bloc/lib/flutter_form_bloc.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@ export 'src/date_time/date_time_field_bloc_builder.dart';
1010
export 'src/date_time/time_field_bloc_builder.dart';
1111
export 'src/dropdown_field_bloc_builder.dart';
1212
export 'src/features/appear/can_show_field_bloc_builder.dart';
13-
export 'src/features/appear/form_bloc_provider.dart';
1413
export 'src/features/scroll/scrollable_field_bloc_target.dart';
1514
export 'src/features/scroll/scrollable_form_bloc_manager.dart';
1615
export 'src/field_bloc_builder.dart';
1716
export 'src/fields/simple_field_bloc_builder.dart';
17+
export 'src/form/form_bloc_provider.dart';
1818
export 'src/form_bloc_listener.dart';
1919
export 'src/groups/fields/checkbox_group_field_bloc_builder.dart';
2020
export 'src/groups/fields/radio_button_group_field_bloc.dart';

packages/flutter_form_bloc/lib/src/fields/list_field_bloc_consumer.dart renamed to packages/flutter_form_bloc/lib/src/fields/multi_field_bloc_consumer.dart

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,36 @@ class ListFieldBlocConsumer<TFieldBloc extends FieldBloc, TExtraData>
5757

5858
static bool fieldBlocsChanges(
5959
ListFieldBlocState prev, ListFieldBlocState curr) {
60-
return prev.fieldBlocs.equals(curr.fieldBlocs);
60+
return !prev.fieldBlocs.equals(curr.fieldBlocs);
6161
}
6262
}
63+
64+
class MapFieldBlocConsumer<TKey, TFieldBloc extends FieldBloc, TExtraData>
65+
extends MultiFieldBlocConsumer<TFieldBloc,
66+
MapFieldBlocState<TKey, TFieldBloc, TExtraData>> {
67+
const MapFieldBlocConsumer({
68+
Key? key,
69+
required MapFieldBloc<TKey, TFieldBloc, TExtraData> mapFieldBloc,
70+
CubitCondition<MapFieldBlocState<TKey, TFieldBloc, TExtraData>>? listenWhen,
71+
CubitListener<MapFieldBlocState<TKey, TFieldBloc, TExtraData>>? listener,
72+
CubitCondition<MapFieldBlocState<TKey, TFieldBloc, TExtraData>>? buildWhen =
73+
fieldBlocsChanges,
74+
Widget? child,
75+
CubitBuilder<MapFieldBlocState<TKey, TFieldBloc, TExtraData>>? builder,
76+
}) : super(
77+
key: key,
78+
multiFieldBloc: mapFieldBloc,
79+
listener: listener,
80+
builder: builder,
81+
child: child,
82+
);
83+
84+
static bool fieldBlocsChanges(
85+
MapFieldBlocState prev, MapFieldBlocState curr) {
86+
return !prev.fieldBlocs.equals(curr.fieldBlocs);
87+
}
88+
}
89+
90+
extension<K, V> on Map<K, V> {
91+
bool equals(Map<K, V> other) => const MapEquality().equals(this, other);
92+
}

packages/flutter_form_bloc/lib/src/fields/simple_field_bloc_builder.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ import 'package:equatable/equatable.dart';
22
import 'package:flutter/material.dart';
33
import 'package:flutter_form_bloc/src/cubit_consumer.dart';
44
import 'package:flutter_form_bloc/src/features/appear/can_show_field_bloc_builder.dart';
5-
import 'package:flutter_form_bloc/src/features/appear/form_bloc_provider.dart';
65
import 'package:flutter_form_bloc/src/features/scroll/scrollable_field_bloc_target.dart';
6+
import 'package:flutter_form_bloc/src/form/form_bloc_provider.dart';
77
import 'package:form_bloc/form_bloc.dart';
88

99
class FieldBlocBuilderData extends Equatable {

packages/flutter_form_bloc/lib/src/features/appear/form_bloc_provider.dart renamed to packages/flutter_form_bloc/lib/src/form/form_bloc_provider.dart

File renamed without changes.

packages/flutter_form_bloc/lib/src/suffix_buttons/suffix_button_bloc_builder.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import 'package:flutter/material.dart';
22
import 'package:flutter_form_bloc/src/cubit_consumer.dart';
3-
import 'package:flutter_form_bloc/src/features/appear/form_bloc_provider.dart';
3+
import 'package:flutter_form_bloc/src/form/form_bloc_provider.dart';
44
import 'package:form_bloc/form_bloc.dart';
55

66
typedef BlocChildBuilder<FieldBlocState> = Widget Function(

packages/form_bloc/lib/src/blocs/field/field_state.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ abstract class MultiFieldBlocState<ExtraData> extends Equatable
235235
});
236236

237237
@override
238-
List<Object?> get props => [isValidating, isValid, extraData];
238+
List<Object?> get props => [extraData];
239239

240240
@override
241241
String toString([Object? other]) {

packages/form_bloc/lib/src/blocs/form/form_bloc.dart

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -187,13 +187,13 @@ abstract class FormBloc<SuccessResponse, FailureResponse>
187187
/// TODO: Fix
188188
/// You can set [insertAt] of this fields, by default is `0`.
189189
void addStep(FieldBloc fieldBloc, {int? insertAt}) =>
190-
_onAddStep(step: insertAt, fieldBlocs: fieldBloc);
190+
_onAddStep(step: insertAt, fieldBloc: fieldBloc);
191191

192192
/// Adds [fieldBloc] to the [FormBloc].
193193
///
194194
/// You can set [at] of this fields, by default is `0`.
195195
void updateStep(int at, FieldBloc fieldBloc) =>
196-
_onUpdateStep(step: at, fieldBlocs: fieldBloc);
196+
_onUpdateStep(step: at, fieldBloc: fieldBloc);
197197

198198
// /// Adds [fieldBlocs] to the [FormBloc].
199199
// ///
@@ -433,32 +433,36 @@ abstract class FormBloc<SuccessResponse, FailureResponse>
433433

434434
void _onAddStep({
435435
int? step,
436-
required FieldBloc fieldBlocs,
436+
required FieldBloc fieldBloc,
437437
}) {
438438
assert(step == null || step > 0 && step <= state._fieldBlocs.length);
439439

440-
if (state._fieldBlocs[step] == fieldBlocs) return;
440+
if (state._fieldBlocs[step] == fieldBloc) return;
441+
442+
fieldBloc.updateAutoValidation(_autoValidate);
441443

442444
emit(state._copyWith(
443445
fieldBlocs: {
444446
...state._fieldBlocs,
445-
step ?? state._fieldStates.length: fieldBlocs,
447+
step ?? state._fieldStates.length: fieldBloc,
446448
},
447449
));
448450
}
449451

450452
void _onUpdateStep({
451453
required int step,
452-
required FieldBloc fieldBlocs,
454+
required FieldBloc fieldBloc,
453455
}) {
454456
assert(step > 0 && step <= state._fieldBlocs.length);
455457

456-
if (state._fieldBlocs[step] == fieldBlocs) return;
458+
if (state._fieldBlocs[step] == fieldBloc) return;
459+
460+
fieldBloc.updateAutoValidation(_autoValidate);
457461

458462
emit(state._copyWith(
459463
fieldBlocs: {
460464
...state._fieldBlocs,
461-
step: fieldBlocs,
465+
step: fieldBloc,
462466
},
463467
));
464468
}

packages/form_bloc/lib/src/blocs/form/form_state.dart

Lines changed: 12 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -531,6 +531,9 @@ abstract class FormBlocState<SuccessResponse, FailureResponse> extends Equatable
531531
}
532532
}
533533

534+
@override
535+
List<Object?> get props => [fieldBlocs, fieldStates, isEditing, currentStep];
536+
534537
@override
535538
String toString() => _toStringWith();
536539

@@ -610,10 +613,7 @@ class FormBlocLoading<SuccessResponse, FailureResponse>
610613

611614
@override
612615
List<Object?> get props => [
613-
isEditing,
614-
_fieldBlocs,
615-
_fieldStates,
616-
currentStep,
616+
super.props,
617617
progress,
618618
];
619619

@@ -654,11 +654,8 @@ class FormBlocLoadFailed<SuccessResponse, FailureResponse>
654654

655655
@override
656656
List<Object?> get props => [
657+
super.props,
657658
failureResponse,
658-
isEditing,
659-
_fieldBlocs,
660-
_fieldStates,
661-
currentStep,
662659
];
663660

664661
@override
@@ -686,14 +683,6 @@ class FormBlocLoaded<SuccessResponse, FailureResponse>
686683
fieldStates: fieldStates,
687684
currentStep: currentStep,
688685
);
689-
690-
@override
691-
List<Object?> get props => [
692-
isEditing,
693-
_fieldBlocs,
694-
_fieldStates,
695-
currentStep,
696-
];
697686
}
698687

699688
/// {@template form_bloc.form_state.FormBlocSubmitting}
@@ -733,12 +722,9 @@ class FormBlocSubmitting<SuccessResponse, FailureResponse>
733722

734723
@override
735724
List<Object?> get props => [
725+
super.props,
736726
progress,
737727
isCanceling,
738-
isEditing,
739-
_fieldBlocs,
740-
_fieldStates,
741-
currentStep,
742728
];
743729

744730
@override
@@ -783,12 +769,9 @@ class FormBlocSuccess<SuccessResponse, FailureResponse>
783769

784770
@override
785771
List<Object?> get props => [
772+
super.props,
786773
successResponse,
787-
isEditing,
788774
canSubmitAgain,
789-
_fieldBlocs,
790-
_fieldStates,
791-
currentStep,
792775
stepCompleted,
793776
];
794777

@@ -830,11 +813,8 @@ class FormBlocFailure<SuccessResponse, FailureResponse>
830813

831814
@override
832815
List<Object?> get props => [
816+
super.props,
833817
failureResponse,
834-
isEditing,
835-
_fieldBlocs,
836-
_fieldStates,
837-
currentStep,
838818
];
839819

840820
@override
@@ -864,14 +844,6 @@ class FormBlocSubmissionCancelled<SuccessResponse, FailureResponse>
864844
fieldStates: fieldStates,
865845
currentStep: currentStep,
866846
);
867-
868-
@override
869-
List<Object?> get props => [
870-
_fieldStates,
871-
isEditing,
872-
_fieldBlocs,
873-
currentStep,
874-
];
875847
}
876848

877849
/// {@template form_bloc.form_state.FormBlocSubmissionFailed}
@@ -891,14 +863,6 @@ class FormBlocSubmissionFailed<SuccessResponse, FailureResponse>
891863
fieldBlocs: fieldBlocs,
892864
currentStep: currentStep,
893865
);
894-
895-
@override
896-
List<Object?> get props => [
897-
isEditing,
898-
_fieldBlocs,
899-
_fieldStates,
900-
currentStep,
901-
];
902866
}
903867

904868
/// {@template form_bloc.form_state.FormBlocDeleting}
@@ -925,10 +889,7 @@ class FormBlocDeleting<SuccessResponse, FailureResponse>
925889

926890
@override
927891
List<Object?> get props => [
928-
isEditing,
929-
_fieldBlocs,
930-
_fieldStates,
931-
currentStep,
892+
super.props,
932893
progress,
933894
];
934895

@@ -969,11 +930,8 @@ class FormBlocDeleteFailed<SuccessResponse, FailureResponse>
969930

970931
@override
971932
List<Object?> get props => [
933+
super.props,
972934
failureResponse,
973-
isEditing,
974-
_fieldBlocs,
975-
_fieldStates,
976-
currentStep,
977935
];
978936

979937
@override
@@ -1013,11 +971,8 @@ class FormBlocDeleteSuccessful<SuccessResponse, FailureResponse>
1013971

1014972
@override
1015973
List<Object?> get props => [
1016-
_fieldStates,
974+
super.props,
1017975
successResponse,
1018-
isEditing,
1019-
_fieldBlocs,
1020-
currentStep,
1021976
];
1022977

1023978
@override
@@ -1057,10 +1012,7 @@ class FormBlocUpdatingFields<SuccessResponse, FailureResponse>
10571012

10581013
@override
10591014
List<Object?> get props => [
1060-
isEditing,
1061-
_fieldBlocs,
1062-
_fieldStates,
1063-
currentStep,
1015+
super.props,
10641016
progress,
10651017
];
10661018

0 commit comments

Comments
 (0)