Flutter 组合可观测值

标签 flutter stream observable rxdart combinelatest

我想组合两个可观察量,并在每个值发生更改时获取两个值。

根据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。

可观察对象(从BehaviorSubject创建以恢复插入流中的最后一个值)_matchViewModel.lineUpPlayers和_matchViewModel.playerSelectedState正在其他StreamBuilder中使用,并且它们似乎工作正常。

这有什么问题吗?

最佳答案

确保您在两个流中发布事件以便能够获取第一个值。

关于Flutter 组合可观测值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55148599/

相关文章:

flutter - 即使有可用空间,NestedScrollView 主体也会继续滚动

flutter - 无论如何,是否可以在 flutter web 的新选项卡中打开页面?

Common Lisp 中用于数据压缩的流接口(interface)

c# - 如何使用 DotNetZip 即时提取 ZIP 文件?

firebase - Angularfire2:授权更改和权限被拒绝时的嵌套可观察量

启动 tel : and email 时出现 flutter 问题

dart - flutter 导航到新屏幕不起作用

stream - 如何以阻塞方式有效地提取 futures::Stream 的第一个元素?

Angular 2 Observable Service 从 localStorage 返回数据

python - 在 RX 中构建双重无限轮询行为