setStateだけでは、Widget間で状態が複雑に絡む事が問題になってくる。

Stream

StreamControllerが、PublishRelayに近い

sink.addで、Streamに値を流す事ができる。

StreamBuilder

StreamBuilderで、値を流す目的のあるWidgetを囲む事でStreamを使う事ができる。

BLoc

BLoCは「BusinessLogicComponent」の略語です。

UIから分離してビジネスロジックだけを担当する部品/要素のことです。

SinkとStreamによってBLoCに入出力することでビジネスロジックが機能しますが、関連するWidgetは複数あり、時には異なる画面に亘ります。

InheritedWIdetを使って、値を注入したい部分だけにBLocにアクセスできるようにする。

長めだけどたぶんわかりやすいBLoCパターンの解説 - Qiita