1

我已经bloc A创建并提供了我的应用程序的所有小部件。

Bloc Bscreen 1.

Bloc B具有对 的引用并且Bloc A可以将事件添加Bloc AmapEventToState.Bloc B

现在奇怪的事情:

BlocBuilder在屏幕 1内Bloc A,我有一个

如果我直接添加事件(状态改变时调用)blocAReference.add(blockAEvent)BlocBuilder

但是,当我将事件间接添加到Bloc AblocBrefrence.add(blockBEvent)然后在内部mapEventToStateBloc B事件添加到Bloc A)时,BlocBuilder不会调用 (但我可以通过print控制台确保事件已添加到Bloc A

我正在使用flutter_bloc图书馆。

4

1 回答 1

1

我发现出了什么问题。

逻辑都很好,除了一件事,我正在使用injectable库来管理依赖项,

我正在注释我Bloc A的 as @Injectable()

所以当库想要注入Bloc ABloc B构造函数时,

Bloc A它每次都创建一个新实例,并且该实例与我在听的那个不同BlocBuilder(我正在听的那个是在小部件树顶部提供的那个,我正在使用它查找它context.bloc<BlocA>()

所以有2个解决方案:

  1. 我保留@Injectable()注释,Bloc A但现在我不注入Bloc ABloc B而是发送Bloc A添加每个事件的实例Bloc B(即作为函数参数)
  2. 我从中删除@Injectable()注释Bloc A并将其替换为,@LazySingleton以便所有使用的查找context.bloc<BlocA>()将使库为我提供与我在所有小部件之上创建injectable的相同实例Bloc A
于 2020-06-20T11:55:52.223 回答