FutureBuilderはずっと動作しています!
3728 ワード
私の心の中で統計庁のオフィスビルを開発したとき、一番怒った瞬間が一番でした.
「Future Billderが思うままに行動するとき」
キーボードがイジェクトされるたびにFutureBuilderが再起動し、画面がリフレッシュされます.
スマートフォンのキーボードとパソコンのそれは違います.ハードウェアに存在しない.アプリケーションからキーボードをポップアップすると、画面に新しい要素が表示され、
すなわち,問題を解決するために
The future must be obtained earlier, because if the future is created at the same time as the FutureBuilder, then every time the FutureBuilder's parent is rebuilt, the asynchronous task will be restarted.
ここで、「早」は
キーボードがイジェクトされても、FutureBuilderは再び動作しません.
「Future Billderが思うままに行動するとき」
キーボードがイジェクトされるたびにFutureBuilderが再起動し、画面がリフレッシュされます.
FutureBuilder
とTextField
が同じ画面にある場合、初心者が直面しやすい問題です.理由は簡単だ.キーボードが上がると、画面が一新され、FutureBuilder
が非同期操作を開始します.そうです.スマートフォンのキーボードとパソコンのそれは違います.ハードウェアに存在しない.アプリケーションからキーボードをポップアップすると、画面に新しい要素が表示され、
build
メソッドが呼び出されます.すなわち,問題を解決するために
FutureBuilder
の非同期動作は1回のみ実行でき,その後build
メソッドが呼び出されても再実行できない.The future must be obtained earlier, because if the future is created at the same time as the FutureBuilder, then every time the FutureBuilder's parent is rebuilt, the asynchronous task will be restarted.
FutureBuilder
の正式な文書の内容の一部を抜粋した.build
メソッドを呼び出すと、FutureBuilder
の将来の非同期操作も再実行されますので、これを回避するために、「早期」に将来を設定してください.ここで、「早」は
initState
の方法に直接置くことを意味する.InitStateは、コンポーネントの作成時に初めて「1回のみ」操作を実行します. Future<dynamic> fetchList() async => await Dio().get("http://www.naver.com");
Future? future;
void initState() {
future = fetchList();
super.initState();
}
initStateでは、Future
型変数に非同期タスクを割り当て、FutureBuilder
のfutureパラメータに戻します.FutureBuilder(
future: future,
builder: (context, snapshot) {
...생략...
}
)
キーボードがイジェクトされても、FutureBuilderは再び動作しません.
Reference
この問題について(FutureBuilderはずっと動作しています!), 我々は、より多くの情報をここで見つけました https://velog.io/@haedong/FutureBuilder-가-계속-동작해요テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol