Flutterで "build "関数が完了したことを伝えるコールバックはありますか?
2023-10-05 01:39:52
質問
画面内にlistViewがあります。私はそれにコントローラを添付しました。私は私のエンドポイントを呼び出すことができ、応答を受け取り、それをパースし、行に挿入します。ListViewは自動的にスクロールするはずです。それはそうする、しかし、完全な方法でない。私は常に1つのアイテムが遅れています。これは私のコードです。
@override
Widget build(BuildContext context) {
// Scroll to the most recent item
if (equationList.length > 0) {
_toEnd();
}
return new Scaffold(
appBar: new AppBar(
title: new Text(widget.title),
),
body: EquList(equationList, _scrollController),
floatingActionButton: new FloatingActionButton(
onPressed: onFabClick,
tooltip: 'Fetch Post',
child: new Icon(isLoading ? Icons.pause : Icons.play_arrow),
),
);
}
void _toEnd() {
_scrollController.animateTo(
_scrollController.position.maxScrollExtent,
duration: const Duration(milliseconds: 250),
curve: Curves.ease,
);
}
問題なのは、私が呼んでいる
_toEnd()
関数を呼び出していることです。そこで、次のようなコールバックを探しています(もしあれば)。
build()
が完了したことを教えてくれるコールバックを探しています。それから、私は自分の
_toEnd()
関数を呼び出します。
この場合のベストプラクティスは何でしょうか?
どのように解決するのですか?
一般的な解決方法
物事をはっきりさせるために、私はこの質問がこれほど注目を集めるとは思っていませんでした。したがって、私はこの非常に特殊なケースについてだけ答えました。
というのも
は別の回答で説明したように
WidgetsBinding
を追加する方法を提供します。
一度だけ
ポストフレーム
コールバック
.
WidgetsBinding.instance.addPostFrameCallback((_) {
// executes after build
})
このコールバックは は一度だけ呼び出されます。 であるため、ビルドするたびに追加する必要があります。
@override
Widget build(BuildContext context) {
WidgetsBinding.instance.addPostFrameCallback((_) => afterBuild);
return Container(); // widget tree
}
void afterBuild() {
// executes after build is done
}
特定(非同期)
を詳しく説明する Günter の のコメントです。
@override
Widget build(BuildContext context) {
executeAfterBuild();
return Container();
}
Future<void> executeAfterBuild() async {
// this code will get executed after the build method
// because of the way async functions are scheduled
}
いい例があります。
があります。
があります。
.
に関する豊富な情報
でのスケジューリング
は、ここで見つけることができます。
.
関連
-
[解決済み] FlutterのコードからWebブラウザ(URL)を開くには?
-
[解決済み] テキストフィールドの値を変更するには?
-
[解決済み] CircularProgressIndicatorにサイズを設定するには?
-
[解決済み] Flutterにおける変数名の前のアンダースコア"_"の意味するところ
-
[解決済み] Flutter: タッチスクリーンでのスクロールを無効にするListView
-
[解決済み] フラッターのライフサイクル
-
[解決済み] Flutter - Container onPressed?
-
[解決済み] DartのNull Safetyとは何ですか?
-
[解決済み] Flutter : ListViewにヘッダー列を追加する方法
-
[解決済み] Flutterでテキストに線を引くには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Navigatorを含まないコンテキストで要求されたNavigator操作
-
[解決済み] InitStateメソッドで非同期データをロードする方法はありますか?
-
[解決済み] フラッターのライフサイクル
-
[解決済み] Flutter - Container onPressed?
-
[解決済み] DartのNull Safetyとは何ですか?
-
[解決済み] フラッター 2つの日付の間の日数を計算する
-
[解決済み] flutterで丸みを帯びたTextFieldを作るには?
-
[解決済み] フラッター 前の画面に戻ることなく、新しい画面に移動する。
-
[解決済み] Flutterで単一のウィジェットを整列させるには?
-
Flutterで円形のコーナーを持つモーダルボトムシートを作成するには?