saDecrement method

void saDecrement (
  1. covariant Rocket sm,
  2. SamReq req
)

Handle action RK.saDecrement

The covariant keyword is used to inform Dart that sm will be a subclass of SamModel and not SamModel specifically.

Even though we are in the SamModel.present execution scope we still need to use sm.flipState() to change the state so that any queued requests will be handled properly.

The SamModel.setHot is used to register the changes so that dependent widget builders get properly notified a change has happened.

The Flutter timer used by this app automatically runs the first time but needs to be reset every time it expires. See prepReady.

Implementation

void saDecrement(covariant Rocket sm,SamReq req) {
  if(sm.bLog)log("faDecrement $sm");
  if (sm.isState([RK.ssCounting,RK.ssWaiting])) sm.setHot("ctr",(sm.getHot("ctr") as int) - 1);
  int ctr = sm.getHot("ctr") as int;
  if (ctr <= 0) {
    sm.flipState(RK.ssLaunched);
  } else {
    if (sm.isState([RK.ssCounting,RK.ssWaiting])) sm._timer.reset();
    if (sm.isState(RK.ssWaiting) && (ctr == 10)) sm.flipState(RK.ssCounting);
  }
}