Flutter BLoC: использование вложенных StreamBuilders - плохая практика? - PullRequest
0 голосов
/ 23 февраля 2019

Есть ли лучший способ выставить виджет двум или более потокам из разных BLoC?До сих пор я использовал вложенные StreamBuilder для столько потоков, сколько мне нужно слушать, как вставленный код ниже.Это хорошая практика?

StreamBuilder(
    stream: firstBloc.stream1,
    builder: (_, AsyncSnapshot snapshot1) {
        return StreamBuilder(
            stream: secondBloc.stream2,
            builder: (_, AsyncSnapshot snapshot2) {
                return CustomWidget(snapshot1.data, snapshot2.data);
            }
        )
    }
)

Использование rxdart таких операторов, как combineLatest2, кажется неуклюжим, поскольку в большинстве случаев я не хочу, чтобы один из блоков использовался для уведомления о потоках в другом блоке.

1 Ответ

0 голосов
/ 23 февраля 2019

Вы не можете делать иначе, используя виджеты.Это одно из ограничений системы виджетов: вещи имеют тенденцию становиться довольно вложенными

Хотя есть одно решение: Hooks, новая функция, появившаяся в React, портированная на Flutter через flutter_hooks (I 'м сопровождающий).

Конечный результат становится следующим:

final snapshot1 = useStream(firstBloc.stream1);
final snapshot2 = useStream(secondBloc.stream2);

return CustomWidget(snapshot1.data, snapshot2.data);

Это ведет себя точно так же, как два вложенных StreamBuilder, но все выполняется внутри одного и того же без и без вложений.

...