gpt4 book ai didi

Flutter从其他Bloc监听Bloc状态

转载 作者:行者123 更新时间:2023-12-03 09:48:10 25 4
gpt4 key购买 nike

您好,我正在尝试从其他团体听取团体的状态。
我正在使用这个包https://pub.dev/packages/bloc

我想从我的 UserBloc 中收听 AuthBloc ,当其状态为 AuthenticationAuthenticated 时, UserBloc 应该触发一个事件。

final UserRepository userRepository;
final authBloc;
StreamSubscription authSub;
UserBloc({ @required this.userRepository, @required this.authBloc}) {
authSub = authBloc.listen((stateAuth) {

//here is my problem because stateAuth, even is AuthenticationAuthenticated it return always false.
if (stateAuth is AuthenticationAuthenticated) {
this.add(GetUser()) ;
}
});
}

@override
Future<void> close() async {
authSub?.cancel();
super.close();
}

现在我有这个问题:
在调试中,我尝试打印stateAuth时返回:
stateAuth = {AuthenticationAuthenticated} AuthenticationAuthenticated
props = {_ImmutableList} size = 0

但是 stateAuth是AuthenticationAuthenticated 返回始终为false。

有什么办法可以从其他Bloc类中监听blocState吗?

最佳答案

要回答Sampir的问题,是的,您是对的,但有时您可能想用另一种方式来做。
团体是为其他人管理事件的东西。如果您正在使用ui事件,则您的集团将为您的ui管理它们,但是如果您还使用其他类型的事件(例如,位置事件或其他流事件),则可以拥有一个用于管理ui事件和其他集团的集团管理其他类型的事件(即蓝牙连接)。因此,第一个集团必须收听第二个集团(即因为正在等待建立蓝牙连接)。考虑一个使用大量传感器的应用程序,每个传感器都有其数据流,您将拥有一系列必须协作的阵​​营。
您可以使用多提供者和多监听器来完成此操作,但是您的链可能会很长,并且编写监听器案例可能很困难,或者您可能希望将其隐藏在用户界面中,或者希望在其他部分重用它应用程序,因此您可能希望在自己的集团内部建立链。

您几乎可以在任何地方将监听器添加到集团中。使用StreamSubscription,您可以为每种流添加监听器,甚至可以将监听器添加到另一块中。团体必须具有公开他的流的方法,以便您可以收听他的声音。

一些代码(我使用flutter_bloc-flutter_bloc具有多个提供程序,但这仅是示例):

class BlocA extends Bloc<EventA, StateA> {

final BlocB blocB;
StreamSubscription subscription;

BlocA({this.blocB}) {
if (blocB == null) return;
subscription = blocB.listen((stateB) {
//here logic based on different children of StateB
});
}

//...

}

class BlocB extends Bloc<EventB, StateB> {
//here BlocB logic and activities
}

关于Flutter从其他Bloc监听Bloc状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59137180/

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