web-dev-qa-db-ja.com

フラッタブロック複数ブロック同じウィジェット

私はフラッターとブロックパターンの比較的新しいですので、私はまだ私の頭をすべての周りに包み込もうとしています。

ファイルから質問を取得するためにリポジトリを使用するブロックがあるQuestionBlocというBlocを持っているクイズアプリがあるとしましょう。 QuestionBloc上のイベント

  • FetchQuestion

QuestionBloc上の状態

  • QuestionEmpty
  • QuestionLoading
  • 質問オブジェクトを含むQuestionLoaded
  • QuestionError

その後、質問に対する答えを検証する責任がある責任があるQuestionValidatorBlocという別のBlocを持っています。回答はテキストフィールドに入力され、検証をトリガーするための送信ボタンがあります。 QuestionValidatorBloc上のイベント

  • ValidateQuestion

QuestionValidatorBloc上の状態

  • ValidateInitial
  • ValidateInProgress
  • ValidateSuccess
  • ValidateError

これはかなり簡単です。ただし、それらのうちの1つが質問の取得と表示を担当する責任があるため、QuestionBlocQuestionValidatorBlocの両方を同じウィジェットに組み込む必要があります。どうやってこれを達成できますか?

11
hoan

flutter_blocライブラリを使用していると仮定しました。 QuestionBlocを使ってQuestionValidatorBlocを聞くStreamSubscription

class QuestionBloc extends Bloc<QuestionEvent, QuestionState> {
  QuestionValidatorBloc questionValidatorBloc;
  StreamSubscription subscription;

  MainPageBloc({@required this.questionValidatorBloc}) {
    subscription= questionValidatorBloc.state.listen((state) {
      if (state is ValidateSuccess) {
        dispatch(YourEvent());
      } else if(state is ValidateError{
        dispatch(AnotherEvent());
      }
    });
  }

...

これで、QuestionValidatorBlocQuestionBlocコンストラクタに渡す必要があります。

4
Xelgar