このページには広告が含まれる場合があります。
StatefulWidgetを使う際に、状態が変化した際に画面の描画を司るbuildメソッドを呼び出すためのsetStateメソッドがありますが、
これに関して、よく見られる疑問として、
処理をしてからsetState(() {});と記述するのと、 setState(() {});の{ }の中に処理を記述するのは、 何が違うのか?
というものがあります。
つまり
void _showQuestion() {
_currentWord = _testDataList[_index];
setState(() {
_isQuestionCardVisible = true;
_isAnswerCardVisible = false;
_isCheckBoxVisible = false;
_isFabVisible = true;
_txtQuestion = _currentWord.strQuestion;
});
_numberOfQuestion--;
_index++;
}
の場合と
void _showQuestion() {
_currentWord = _testDataList[_index];
_isQuestionCardVisible = true;
_isAnswerCardVisible = false;
_isCheckBoxVisible = false;
_isFabVisible = true;
_txtQuestion = _currentWord.strQuestion;
setState(() {});
_numberOfQuestion--;
_index++;
}
の場合で何が違うのかというものです。
これについては、
・setState内に書く場合は、再描画時に行いたい処理
・setStateより前で書く場合は、再描画より前で行いたい処理(=当該処理を行った後に再描画)
という使い分けになります。
例えば、非同期処理を行った結果(Webやデータベースからの情報取得処理)を画面に反映させたい場合は、当該処理を行った後に画面の再描画(setStateの呼び出し)を行う必要があるので、後者で行うことになります。

















