はじめに
一つの画面で複数のStreamを受け取りたいときに困ったので、調べた結果をまとめる。
結論から言うと、stream_transform
をimportしてcombineLatestAll
を使えば良い。
困ったこと
実現したい挙動
投稿一覧画面で、投稿一覧を表示。
ログインしているユーザが各投稿にお気に入りをしてる場合としていない場合で表示するアイコンを切り替える。
困ったこと
StreamとしてFirebaseから投稿一覧を取ってきつつ、同様にログインしているユーザがお気に入りに登録している投稿の一覧をStreamとして取得したい。
だが、StreamBuilderやFutureBuilderの中に入れるにしても、複数の処理を引数に取れないっぽいので、困った。
解決方法
stream_transform
のパッケージを使う。
以下のように、Streamをまとめることができる。
Stream<Map<String, dynamic>> streamName() {
return stream1().combineLatestAll([stream2, stream3()]).map((data) {
return { "stream1": data[0], "stream2": data[1], "stream3": data[2] };
});
}
こうすれば、streamBuilder
とかでstreamName()
を入れてデータをまとめて受け取ることができる。
参照ページ
以下のような記事を見て、packageの存在を知った。