Flutterアプリを作るためのプログラミング言語であるDartには「const」というキーワードがありますが、実はこの「const」キーワードは意味が2種類あって、「『使う』場面(インスタンスの生成)」と「コンストラクタを『作る』場面(クラスの設計図)」で意味合いが異なります。
「『使う』場面(インスタンスの生成)」における「const」
「『使う』場面(インスタンスの生成)」は、値が変更できないインスタンスである「定数」を意味していますが、「定数」には2種類あって、
- コンパイル段階で値が決定しているものが「const」
- コンパイル段階では決定していないが、ビルド段階で決定するものが「final」
という使い分けがされており、この場合の「const」はこれに当たります。
「コンストラクタを『作る』場面(クラスの設計図)」における「const」
一方、「コンストラクタを『作る』場面(クラスの設計図)」における「const」はDartの7つのコンストラクタの1つである「定数コンストラクタ(Constant Constructors)」にあたります。
これは、「(コンストラクタによるインスタンス)作成後変更できないコンストラクタ」を意味していて、作成タイミングは問いません(コンパイル段階の場合もあれば、ビルド段階の場合もある)。
ですので、ちょっとややこしいですが、クラスの設計図内でのコンストラクタに「const」がついていても、使う段階ではコンパイル段階では値が決定できないので「const」が付けられない場合があるので注意が必要です(BuildContextなどを引数に持つ時)。
(詳しくは、以下の動画で解説していますので、よろしければご覧下さい)