mapEventToState method
- @override
Must be implemented when a class extends bloc
.
Takes the incoming event
as the argument.
mapEventToState is called whenever an event
is added.
mapEventToState must convert that event
into a new state
and return the new state in the form of a Stream<State>
.
Implementation
@override
Stream<JsonSchemaState> mapEventToState(JsonSchemaEvent event) async* {
if (event is LoadDataSchemaEvent) {
_formDataClose();
initDataBinding(event.dataSchema?.properties);
yield state.copyWith(dataSchema: event.dataSchema);
print("LoadJsonSchemaEvent executed");
//
// currentState.data?.forEach((key, value) {
// print("Loaded(key: ${key}, value: ${value})");
// if (_formData.containsKey(key)) {
// _formData[key].add(value);
// }
// });
} else if (event is LoadDataEvent) {
var currentData = event.data ?? state.data;
currentData?.forEach((key, value) {
if (_formData.containsKey(key)) {
_formData[key].add(value);
print("Loaded(key: $key, value: $value)");
}
});
yield state.copyWith(data: event.data);
print("LoadDataEvent executed");
} else if (event is LoadLayoutSchemaEvent) {
yield state.copyWith(layout: event.layout);
print("LoadLayoutSchemaEvent executed");
} else if (event is ChangeValueJsonSchemaEvent) {
print("event.key: ${event.key}, event.value: ${event.value}");
if (_formData.containsKey(event.key)) {
_formData[event.key].add(event.value);
}
var currentData = state.data;
currentData[event.key] = event.value;
print("ChangeValueJsonSchemaEvent executed");
yield state.copyWith(data: currentData);
} else if (event is SubmitJsonSchemaEvent) {
try {
print("currentState.data: ${state.data}");
var formState = formKey?.currentState ?? Form.of(formContext);
print("formState: $formState");
if (formState.validate()) {
print("Valid form state");
formState.save();
var validator = Validator(state.dataSchema);
if (validator.validate(state.data)) {
_submitData.add(json.encode(state.data));
} else {
_submitData.add(validator.errors.toString());
}
} else {
_submitData.add("Invalid form state");
}
} on Error catch (e) {
_submitData.add(e.toString());
}
yield state;
}
}