回答編集履歴

1

不適切な対応方法があったので削除。あとinitState内のFutureでsetStateする処理のサンプル。

2022/09/19 08:24

投稿

ta.fu
ta.fu

スコア1740

test CHANGED
@@ -13,4 +13,49 @@
13
13
  0. buildでウィジェットの作成をする
14
14
  0. Futureに登録されている関数が実行される
15
15
 
16
- initState内かbuildでウィジェット作成前に、initStateで呼び出したFutureをawaitすればFuture内の関数の処理完了後ウィジェットの作成を行うこともできますが、これはFutureの処理時間が一瞬である前提であれば良いですが、処理時間が長期に及ぶ場合、そこで処理がいったん止まるので、いい対策とは言えないです。
16
+ ~~initState内かbuildでウィジェット作成前に、initStateで呼び出したFutureをawaitすればFuture内の関数の処理完了後ウィジェットの作成を行うこともできますが、これはFutureの処理時間が一瞬である前提であれば良いですが、処理時間が長期に及ぶ場合、そこで処理がいったん止まるので、いい対策とは言えないです。~~
17
+ initState内でawaitする件については、initStateがもともとasyncな関数ではなく、上位側からawaitされていないので、対応として問題があるので記述として削除しました。
18
+
19
+ ---
20
+ initState内のFuture関数内でsetStateする処理のサンプルです。
21
+
22
+ ```dart
23
+ class ListTile2 extends StatefulWidget {
24
+ const ListTile2({Key? key}) : super(key: key);
25
+
26
+ @override
27
+ State<ListTile2> createState() => _ListTile2State();
28
+ }
29
+
30
+ class _ListTile2State extends State<ListTile2> {
31
+ @override
32
+ void initState() {
33
+ super.initState();
34
+ Future(() async {
35
+ await Future.delayed(const Duration(seconds: 1));
36
+ value = "hoge";
37
+ setState(() {});
38
+ });
39
+ }
40
+
41
+ String value = "10"; // これが表示用のデータで初期値10でFuture内でhogeに変更している。
42
+
43
+ @override
44
+ Widget build(BuildContext context) {
45
+ return Scaffold(
46
+ appBar: AppBar(
47
+ title: const Text("ListTile2 test"),
48
+ ),
49
+ body: Card(
50
+ child: ListTile(
51
+ title: Row(
52
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
53
+ children: [Text(value), const Text("10")],
54
+ ),
55
+ trailing: const Icon(Icons.arrow_forward_ios),
56
+ ),
57
+ ),
58
+ );
59
+ }
60
+ }
61
+ ```