問題タブ [rxdart]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
2458 参照

flutter - StreamBuilderがLayoutBuilder内にある場合のFlutter無限ループ

ここで説明されているように、 LayoutBuilderを使用してページを作成しています

LayoutBuilder 内に、ブロック クラスSignupFormBlo cを利用したTextFieldを持つStreamBuilderを配置しました。ストリームはBehaviorSubjectです

誰かが入力に何かを入れると、ストリームのシンクである onChanged 関数がトリガーされます。そのため、ストリームに値を追加し、その値を StreamTransformer に渡して値を検証し、 StreamBuilderにエラー メッセージ (値が無効な場合) で TextField を再度構築させます。

これが問題の始まりです。

TextField をクリックして何かを入力すると、次のような無限ループが始まります。

  • StreamBuilder はストリーム内の新しい値を認識します
  • StreamBuilder は TextField を再構築しようとします
  • これがどのように LayoutBuilder ビルダー関数をトリガーするか
  • LayoutBuilder ビルダー関数は、StreamBuilder を再度ビルドします。
  • StreamBuilderはストリームで値を見つけます(BehaviorSubjectのため)
  • 最初のいじめからやり直して無限ループ

ヒント: BehaviorSubject を PublishSubject に変更すれば、すべて問題ありません

ヒント 2: StreamBuilder を完全に削除して TextField を空白のままにすると、すべてのエントリで LayoutBuilder ビルダー関数が実行されていることがわかります。それは正常な動作ですか?