Я пытаюсь создать блок, который зависит от двух других блоков. Например, у меня есть Bloc C
, который зависит от Bloc A
и Bloc B
. Я пытаюсь сделать что-то вроде следующего, используя flutter_bloc, чтобы добиться этого:
class BlocC
extends Bloc< BlocCEvent, BlocCState> {
final BlocA blocA;
final BlocC blocB;
StreamSubscription blocASubscription;
StreamSubscription blocBSubscription;
BlocC({
@required this.blocA,
@required this.blocB,
}) : super((blocA.state is blocALoaded &&
blocB.state is blocBLoaded)
? BlocCLoaded(
blocA: (blocA.state as blocALoaded).arrayFromBlocA,
blocB:
(blocB.state as blocBLoaded).arrayFromBlocB,
)
: BlocCLoading()) {
blocASubscription = blocA.stream.listen((state) {
if (state is blocALoaded) {
add(BlocAUpdated((blocA.state as blocALoaded).arrayFromBlocA));
}
});
blocBSubscription = blocB.stream.listen((state) {
if (state is BlocBLoaded) {
add(BlocBUpdated((blocB.state as BlocBLoaded).arrayFromBlocB));
}
});
}
...
@override
Future<void> close() {
blocASubscription.cancel();
BlocBSubscription.cancel();
return super.close();
}
}
Проблема в том, что я получаю следующую ошибку: Bad state: Stream has already been listened to
. Я нашел информацию об этой ошибке в следующем сообщении. .
Я понимаю, что ошибка возникает из-за того, что поток может слушать только один блок за раз, а не несколько. В моем случае поток уже слушает blocA
, когда я пытаюсь прослушать blocB
. Однако я не уверен, как решить эту проблему.
Я буду очень признателен за любую помощь в этом.