initialData<D> method

InitialData<D> initialData<D>(
  1. D initialValue(
    1. P payload
    )
)

Creates an InitialData that produces its value by calling initialValue with the payload provided when entering the state through this channel.

var s1 = StateKey('state1');
var s2 = DataStateKey<S2Data>('state2');
var s2Channel = Channel<String>(s2);
class S2Data {
  String value = '';
}
var builder = StateTreeBuilder(initialChild: parentState);

builder.state(s1, (b) {
  b.onMessageValue('go', (b) => b.enterChannel(s2Channel, (msgCtx, msg) => 'Hi!'));
});

builder.dataState<S2Data>(
  s2,
  channel.initialData((payload) => S2Data()..value = payload),
  (b) {
    b.onEnter((b) {
      // Will print 'Hi!'
      b.run((transCtx, data) => print(data.value));
    });
  });

Implementation

InitialData<D> initialData<D>(D Function(P payload) initialValue) {
  return InitialData.run((transCtx) {
    try {
      return initialValue(transCtx.payloadOrThrow<P>());
    } catch (e) {
      throw StateError('Failed to obtain inital data of type $D for '
          'channel ${label != null ? '"$label" ' : ''}'
          'to state $to: $e');
    }
  });
}