initialData<D> method
InitialData<D>
initialData<D>(
- D initialValue(
- 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');
}
});
}