Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 对于BLoC模式,如何处理不会导致状态更改(如日志)的事件是最好的?_Flutter_Bloc - Fatal编程技术网

Flutter 对于BLoC模式,如何处理不会导致状态更改(如日志)的事件是最好的?

Flutter 对于BLoC模式,如何处理不会导致状态更改(如日志)的事件是最好的?,flutter,bloc,Flutter,Bloc,我有(简化的)两个bloc,一个是widget树(用户管理)顶部的应用程序的全局bloc,另一个是该树中的页面bloc(UI管理)。现在我想根据用户输入从pageBloc更新userBloc中的数据,这不会直接影响任何即时呈现 我知道方法 if(userBloc.state为appsolited) myPageUserVar=(userBloc.state为AppSettled); 我知道如何通过触发事件来获取数据。但是,我不知道如何处理事件,而不必在上层userBloc中发布状态更改。有什么

我有(简化的)两个bloc,一个是widget树(用户管理)顶部的应用程序的全局bloc,另一个是该树中的页面bloc(UI管理)。现在我想根据用户输入从pageBloc更新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的方法。