updateData<D2> method

void updateData<D2>(
  1. D2 update(
    1. TransitionHandlerContext<D2, C> ctx
    ), {
  2. StateKey? stateToUpdate,
  3. String? label,
})

Updates ancestor state data of type D2 when the transition occurs.

class MyStateData {
  int value;
}

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

builder.dataState<MyStateData>(
  state1,
  InitialData(() => MyStateData()),
  emptyState,
  initialChild: InitialChild(state2)
});

builder.state(state2, (b) {
  // Update state data in ancestor state
  b.onEnter((b) => b.updateData<MyStateData>((ctx) => ctx.data..value += 1)));
}, parent: state1);

If more than one ancestor data state share the same state data type of D2, stateToUpdate can be provided to specify which state data should be updated.

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

Implementation

void updateData<D2>(
  D2 Function(TransitionHandlerContext<D2, C> ctx) update, {
  StateKey? stateToUpdate,
  String? label,
}) {
  _descriptor = makeUpdateDataDescriptor(update, _makeContext, _forState, _log, label);
}