Q&A
前提
Flutterを最近始めたのですが、私がインストールしたFlutterでは、新しいプロジェクトを作成した際に生成されるmain.dart
の中で、以下のような変更があったようです。
dart
1//旧 2class MyHomePage extends StatefulWidget { 3 MyHomePage({Key key, this.title}) : super(key: key); 4 ... 5 6 _MyHomePageState createState() => _MyHomePageState(); 7} 8 9class _MyHomePageState extends State<MyHomePage> { 10 int _counter = 0; 11 ... 12} 13 14//新 15class MyHomePage extends StatefulWidget { 16 const MyHomePage({super.key, required this.title}); 17 ... 18 19 State<MyHomePage> createState() => _MyHomePageState(); 20} 21 22class _MyHomePageState extends State<MyHomePage> { 23 int _counter = 0; 24 ... 25}
上記のように、以前まではcreateState()
の戻り値の型が_MyHomePageState
クラス(State<MyHomePage>
のサブクラス)でしたが、私がインストールしたFlutterでは、戻り値の型がState<MyHomePage>
クラス(_MyHomePageState
クラスのスーパークラス)になっていました。
スーパークラスへのアップキャストを行っているので、_counter
が参照されなくなり、実行時にエラーが発生したり動作がおかしくなったりするのではないかと考えました。しかし、実際に実行してみると、エラーも発生せず動作も正常(カウンターの初期値が0)でした。
分からないこと
このmain.dart
では正常に動作しましたが、その他の場合でこのような新しい記述をした場合、動作がおかしくなったりなどする可能性はあるのでしょうか?
また、わざわざこのようなアップキャストを行う形に変更されたということは、今後はこちらの記述が推奨されるのでしょうか?
試したこと
以下のページでは新しい方のものが記載されていましたが、戻り値の型については言及されていませんでした。
createState method - StatefulWidget class - widgets library - Dart API
補足情報(FW/ツールのバージョンなど)
Flutter 3.3.10 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 135454af32 (3 weeks ago) • 2022-12-15 07:36:55 -0800
Engine • revision 3316dd8728
Tools • Dart 2.18.6 • DevTools 2.15.0
回答2件
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。