mapEventToState method

  1. @override
Stream<JsonSchemaState> mapEventToState ( JsonSchemaEvent event)

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;
  }
}