Flutter学習での先日のエラー。
##症状
This class (or a class that this class inherits from) is marked as '@immutable', but one or more of its instance fields aren't final: HomePage.cameras
このクラスはimmutableなクラスであるのに、final修飾子がないフィールド(メンバ変数)があるよと言っています。
immutable(イミュータブル)とは
immutable(イミュータブル)とは、直訳で「不変」「変わらない」という意味。
プログラム的に言えば、作成後のオブジェクトの状態を変えちゃダメってこと。
StatelessWidget、StatefulWidegetを拡張するクラスではイミュータブルでなくてはなりません。
対処法:finalをつける
イミュータブルであることを明示するためにも、**StatelessWidget、StatefulWidegetを拡張するクラスのすべてのフィールドはfinalである必要があります。**ってよく見たら、警告でも言っていますね。
final修飾子をつけると、宣言後に値の変更をすることができません(説明不要かと思いますが念のため)。
ひとつfinal修飾子が抜けていたので修正すると無事解決。
修正前
class HomePage extends StatefulWidget {
final Color pannelColor;
final String title;
List<CameraDescription> cameras;
HomePage({
@required this.pannelColor,
@required this.title,
@required this.cameras,
});
修正後
class HomePage extends StatefulWidget {
final Color pannelColor;
final String title;
final List<CameraDescription> cameras; // finalを付加
HomePage({
@required this.pannelColor,
@required this.title,
@required this.cameras,
});
そのほかの対処法
とにかく警告を削除したければ、クラス定義の頭に// ignore: must_be_immutable
を追記してください。