Flutter 对于BLoC模式,如何处理不会导致状态更改(如日志)的事件是最好的?
我有(简化的)两个bloc,一个是widget树(用户管理)顶部的应用程序的全局bloc,另一个是该树中的页面bloc(UI管理)。现在我想根据用户输入从pageBloc更新userBloc中的数据,这不会直接影响任何即时呈现 我知道方法Flutter 对于BLoC模式,如何处理不会导致状态更改(如日志)的事件是最好的?,flutter,bloc,Flutter,Bloc,我有(简化的)两个bloc,一个是widget树(用户管理)顶部的应用程序的全局bloc,另一个是该树中的页面bloc(UI管理)。现在我想根据用户输入从pageBloc更新userBloc中的数据,这不会直接影响任何即时呈现 我知道方法 if(userBloc.state为appsolited) myPageUserVar=(userBloc.state为AppSettled); 我知道如何通过触发事件来获取数据。但是,我不知道如何处理事件,而不必在上层userBloc中发布状态更改。有什么
if(userBloc.state为appsolited)
myPageUserVar=(userBloc.state为AppSettled);
我知道如何通过触发事件来获取数据。但是,我不知道如何处理事件,而不必在上层userBloc中发布状态更改。有什么想法吗
我是否可以简单地向
mapEventToState
添加一个条件而不使用任何yield语句,或者这是否会导致任何问题(在示例中从未见过类似的情况)您可以通过依赖项注入将一个bloc服务于另一个bloc,如下所示:
class PageBloc extends Bloc {
final UserBloc userBloc;
StreamSubscription userBlocSubscription;
MyBloc(this.userBloc) {
userBlocSubscription = userBloc.listen((state) {
// React to state changes here.
// Add events here to trigger changes in PageBloc.
});
}
@override
Future<void> close() {
userBlocSubscription .cancel();
return super.close();
}
}
BlocListener<pageBloc, StateA>(
listener: (context, state) {
context.bloc<userBloc>().add(...);
},
child: ...
)
如果您确实想更改某些数据但不想更改状态,这是否违反了集团规则?你为什么不改变状态?您能否使用两个事件,如
userdataupdatestate
和userdataupdatestate
来完成您的目标?因为屏幕的状态由pageBloc控制。如果我将事件“has clicked this button”从pageBloc(此处更改状态)发送到userBloc as以将其保存在中心日志文件中,则没有必要更改userBloc状态,由于它对屏幕没有影响,而且一般来说,仅仅记录数据不会改变任何UI状态,我仍然认为您可以在userBloc中添加两种状态,例如savingCentralLog
和Done
,即使对UI没有影响。否则,您可能不希望在userBloc中处理此问题。上面的代码段向下通信,对吗?在我的例子中,从userBloc到pageBloc。我也在这个方向上实现了DI。我不知道如何在另一个方向上使用相同的方法,因此在上面的示例中,从MyBloc到OtherBloc。目前,我已经实现了与第二个代码片段类似的解决方案,创建了一个指向userBloc的事件,在事件状态映射中,我存储了数据,但没有产生任何状态更改。检查更新后的答案,要从pageBloc触发userBloc中的某些内容,您可以尝试使用推荐的方法,即userBloc.add(事件)
但是我想你也可以尝试在这里调用userBloc的方法。