Пакет Flutter Bloc, состояние yield, когда собственный код вызывает метод из dart

В моем блоке 2 потока. Один - это mapEventToState, где я могу передавать состояния, и я создал вторую, которая вызывается из функции, которая вызывается собственным кодом.

Звонок:

checkStatus(_internalState).listen((data){});

Поток:

Stream<VpnConnectionState> checkStatus(_internalState) async * {
switch (_internalState) {
  case state.down:
    yield down();
    break;
  case state.up:
    yield up();
    break;
}
_previousState = _internalState;
}

Проблема в том, что я yield что-то в checkSatus потоке не поступает в мой BlocBuilder. Если вызывается из потока mapEventToState работает.


person jalanga    schedule 07.11.2019    source источник


Ответы (1)


Это совершенно разные потоки. Ваш BlocBuilder слушает ваш mapEventToState поток, а не ваш checkStatus. Dispatch (или add в последней версии) из вашего потока checkStatus в ваш блок, а затем выдает новое состояние в mapEventToState при ответе на эти события.

Или даже избавьтесь от потока checkStatus для простоты, как здесь:

void checkStatus(_internalState) {
switch (_internalState) {
  case state.down:
     dispatch(DownEvent());
    break;
  case state.up:
    dispatch(UpEvent());
    break;
}
_previousState = _internalState;
}

void mapEventToSteam(Event event) {
    if(event is DownEvent) {
     yield DownState()
   }
    if(event is UpEvent) {
     yield UpState()
   }
person Filip P.    schedule 07.11.2019
comment
Спасибо, я не знал, что это функция dispatch (), которую можно вызывать без контекста внутри блока. - person jalanga; 07.11.2019
comment
Я не знал об использовании add() (или dispatch). Это гениально и так ... просто! Ты спас мне день. - person fllo; 25.10.2020