gpt4 book ai didi

flutter - 在使用 flutter_bloc 库发送事件之前等待一些结果

转载 作者:IT王子 更新时间:2023-10-29 07:19:27 27 4
gpt4 key购买 nike

我正在尝试创建一个 BLOC,它依赖于另外两个基于时间的 bloc 和一个非基于时间的 bloc。我所说的基于时间的意思是,例如,他们正在连接远程服务器,所以这需要时间。它的工作原理是这样的:

登录(当然需要一些时间)

如果登录成功

做另一个过程(这也需要时间。它返回一个 future 。)

登录和另一个进程完成后,让页面知道。

我的 BLOC 依赖于这三个:

final UserBloc _userBloc;
final AnotherBloc _anotherBloc;
final FinishBloc _finishBloc;

在映射事件到状态方法中,我应该调度相关事件。但是,如果他们完成了,我等不及了。

_userBloc.dispatch(
Login(),
);

_anotherBloc.dispatch(
AnotherProcess(),
);

//LetThePageKnowIt should work after login and another process
_finishBloc.dispatch(
LetThePageKnowIt(),
);

有没有一种干净的方法可以在发送之前等待其他人?

我知道我使用了一种我不喜欢的方式。在我连接其他 Bloc 的主要 Bloc 状态下,我有 bools。

class CombinerState {
bool isLoginFinished = false;
bool isAnotherProcessFinished = false;

我正在主区 block 的构造函数中监听时间相关区 block 的状态。当他们产生“我完成了”时,我只是将 bool 值标记为“真”。

MainBloc(
this._userBloc,
this._anotherBloc,
this._pageBloc,
); {
_userBloc.state.listen(
(state) {
if (state.status == Status.finished) {
dispatch(FinishLogin());
}
},
);

_anotherBloc.state.listen(
(state) {
if (state.status == AnotherStatus.finished) {
dispatch(FinishAnotherProcess());
}
},
);
}

我为 main bloc 发送另一个事件,以在将 bool 设置为 true 后检查所有 bool 是否为 true。

else if (event is FinishAnotherProcess) {
newState.isAnotherProcessFinished = true;

yield newState;

dispatch(CheckIfReady());
}

如果 bool 值是真的,我发送 LetThePageKnowIt()

else if (event is CheckIfReady) {
if (currentState.isAnotherProcessFinished == true &&
currentState.isLoginFinished == true) {
_pageBloc.dispatch(LetThePageKnowIt());
}
}

我对这段代码不满意。我正在寻找一种方法来等待其他 BLOC 发送“完成”状态。之后我想发送我的 LetThePageKnowIt()

最佳答案

@pskink 的建议解决了我的问题。

我创建了两个返回 future 的方法。在他们里面,我只是在等待我的信息流。这是登录流的示例。

在事件到状态的映射中,在分派(dispatch)之后,我等待一个异步方法。

_userBloc.dispatch(
Login(),
);

_anotherBloc.dispatch(
AnotherProcess(),
);

await loginProcess();
await otherProcess();

_finishBloc.dispatch(
LetThePageKnowIt(),
);

在方法中,我只是等待 userbloc 完成它的工作并产生它。然后返回。

Future loginProcess() async {
await for (var result in _userBloc.state) {
if (result.status == Status.finished) {
return;
}
}
}

关于flutter - 在使用 flutter_bloc 库发送事件之前等待一些结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56322631/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com