post<M> method

void post<M>({
  1. FutureOr<M> getMessage(
    1. TransitionHandlerContext<D, C> ctx
    )?,
  2. M? message,
  3. String? label,
})

Posts a message to be processed by the state machine when the transition occurs.

If getMessage is provided, the function will be evaluated when the transition occurs, and the returned message will be posted. Otherwise a message must be provided.

var state1 = StateKey('s1');
var builder = StateTreeBuilder(initialState: state1);

builder.state(state1, (b) {
  // Post a MyMessage message when this state is entered.
  b.onEnter((b) => b.post(getMessage: (ctx) => MyMessage()));
});

This action can be labeled when formatting a state tree by providing a label.

Implementation

void post<M>({
  FutureOr<M> Function(TransitionHandlerContext<D, C> ctx)? getMessage,
  M? message,
  String? label,
}) {
  if (getMessage == null && message == null) {
    throw ArgumentError('getMessage or message must be provided');
  } else if (getMessage != null && message != null) {
    throw ArgumentError('One of getMessage or message must be provided');
  }
  var _getMessage = getMessage ?? (_) => message!;
  var messageName =
      StateBuilder._getMessageName(null, message) ?? TypeLiteral<D>().type.toString();
  _descriptor = makePostDescriptor<D, C, M>(
    _getMessage,
    _makeContext,
    _log,
    messageName,
    label,
  );
}