Флаттер объединяет наблюдаемые - PullRequest
0 голосов
/ 13 марта 2019

Я хочу объединить две наблюдаемые и получить оба значения при изменении каждого из них.

Согласно https://pub.dartlang.org/documentation/rxdart/latest/rx/Observable/combineLatest2.html и его мраморной диаграмме, это именно то, что я хочу.

Итак, у меня есть:

var observable = CombineLatestStream.combine2(_matchViewModel.lineUpPlayers, _matchViewModel.playerSelectedState, (lineUpPlayers, playerSelectedState) {
    return [lineUpPlayers, playerSelectedState];
});

return Stack(children: <Widget>[
    Align(
        alignment: Alignment.topRight,
        child: Padding(
            padding: EdgeInsets.all(8.0),
            child: _buildFormationSelector(match)
        )),
    StreamBuilder(stream: observable, builder: (context, snapshot) {
        if(snapshot.data == null) {
            return new CircularProgressIndicator();
        } else {
            Map<String, Player> lineUpPlayers = snapshot.data[0];
            bool playerSelectedState = snapshot.data[1];
            return Column(
                mainAxisAlignment: MainAxisAlignment
                    .spaceEvenly,
                children: _buildFormation(match, lineUpPlayers)
            );
        }
    })
]);

Проблема в том, что snapshot.data всегда имеет значение null.

Объекты obsevables (созданные из BehaviorSubject для восстановления последнего значения, вставленного в поток) _matchViewModel.lineUpPlayers и _matchViewModel.playerSelectedState используются в других StreamBuilders и, похоже, работают правильно.

Что не так с этим ??

1 Ответ

1 голос
/ 14 марта 2019

Убедитесь, что вы публикуете событие в обоих потоках, чтобы иметь возможность получить первое значение.

...