runRootCore<Event> function

void runRootCore<Event>({
  1. required WidgetMachineLayerType<Event, dynamic, dynamic> main,
  2. required Set<MachineLayerType<Event, dynamic, dynamic>> secondary,
})

Starts the application flow. main - main layer. secondary - secondary layers.

Implementation

void runRootCore<Event>({
  required WidgetMachineLayerType<Event, dynamic, dynamic> main,
  required Set<MachineLayerType<Event, dynamic, dynamic>> secondary,
}) {
  final WidgetMachine<Event, Event> mainMachine = main._child();

  final Iterable<Machine<Event, Event>> secondaryMachines = secondary
      .map((MachineLayerType<Event, dynamic, dynamic> e) => e._child());

  final Set<Machine<Event, Event>> machines = List<Machine<Event, Event>>.from(
    secondaryMachines,
  ).toSet();

  final WidgetMachine<Event, Event> root = mergeWidgetMachine(
    main: mainMachine,
    secondary: machines,
  ).redirect(
    (Event output) => Direction<Event>.back(Ward<Event>.single(output)),
  );

  runRootMachine<Event, Event>(root);
}