エントリポイントとクラス
初期プロジェクトの中には、
・ void main() { runApp() }
・ class MyApp extends StatelessWidget {}
・ class MyHomePage extends StatefulWidget {}
・ class _MyHomePageState extends State<MyHomePage> {}
の、1つのエントリポイントと3つのクラスがあることを確認できる。
void main() { runApp() }
・アプリの初期化時に一度だけ呼ばれるエントリポイント。そのため他のモジュールでは書く必要がない。
・初期化したい処理はこのエントリポイントの中で実装する。(Firebaseを初期化したい際などはこのエントリポイントの中に実装を記述したりする)
class MyApp extends StatelessWidget {}
・状態を変更することのない、不変で静的なUIを定義したいときに用いるクラス。
・(特殊なアニメーションを用いない)アプリの背景色べた塗りや、タイトルラベルテキストなどはここ。
class MyHomePage extends StatefulWidget {}
・StatefulWidgetのインターフェースのようなもので、呼び出し元から不要な変更を受け付けないようにするため噛ませられている。
・クラスの中でStateオブジェクトを定義し、呼び出すことを責務としている。
class _MyHomePageState extends State {}
・動的なUIを実装する。値の変更と同時に画面を再描画させられる役割を持つ。
・クラス名を_からスタートさせることで、Privateクラスとして実装できる。こうすることで、他のクラスから不用意に直接的なアクセスを受け入れられないようにする。
ゆえに
・実装する画面が静的なUIのみで構成されている場合は、StatelessWidgetのみで事足りるため、StatefulWidgetやStateを使う必要がないこともある。