この間Flutterのデータ読み込みタイミングについて質問させていただきましたが、またわからないところが出たのでご教授いただけると助かります。
https://teratail.com/questions/285351
初期データ読み込みはFutureBuilderで行うといいという理解はできたのですが、FutureBuilder内のどこかでsetStateを行うとFutureBuilderの引数futureに渡されたメソッドが再び呼ばれてしまい、初期値が何度も代入されてしまうという問題に直面しました。
例えば下のようなコードがその例になります。
import 'package:flutter/material.dart'; class SetStateScreen extends StatefulWidget { @override _SetStateScreenState createState() => _SetStateScreenState(); } class _SetStateScreenState extends State<SetStateScreen> { Future<int> getData() async { // 何らかの非同期で初期値を取ってくる処理 int default_num = 0; // 取ってきた初期値を表す変数 return default_num; } @override Widget build(BuildContext context) { int x; return Container( color: Colors.white, child: FutureBuilder( future: getData(), builder: (BuildContext context, AsyncSnapshot<int> snapshot) { Widget childWidget; if (snapshot.hasData) { // futureBuilderでgetした初期値代入 // setStateの度に呼ばれ、初期値が何度も代入されてしまう。 x = snapshot.data; childWidget = Center( child: Container( child: FlatButton( onPressed: () { setState(() { x += 1; }); }, child: Text("$x"), )), ); } else { childWidget = Container(); } return childWidget; }), ); } }
こういう場合、例えば上のコードを正しく動かせる良い実装方法などありましたらご教授いただけると幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/09/09 02:34