警告信息
Flutter开发遇到如下警告 Constructors in '@immutable' classes should be declared as 'const'.
报错代码
class TaskWidget extends StatefulWidget {
final String title;
final bool isChecked;
final int order;
TaskWidget({
required this.title,
required this.isChecked,
required this.order,
Key? key,
}) : super(key: key);
@override
State<TaskWidget> createState() => _TaskWidgetState();
}
警告原因
这个警告是由于在Flutter中,如果你定义的类是不可变的额,你最好用@immutable注解标记标记下,即使你不标记,代码检测也会检测出来。当你使用@immutable注解标记一个类时,它要求该类的构造函数应该声明为const构造函数。@immutable是一个元数据注解,用于指示类是不可变的,这样的类在某些情况下可以提供性能优势。
在Dart中,const构造函数表示该构造函数创建的对象是不可变的,这样的对象可以在编译时进行常量折叠,从而提高性能。当你标记一个类为@immutable时,Flutter希望你的构造函数也是const的,以确保对象的不可变性。
例如,以下是一个简单的使用@immutable注解的类:
@immutable
class MyImmutableClass {
final int value;
const MyImmutableClass(this.value);
}
在上面的例子中,构造函数被声明为const,这符合@immutable的要求。如果你的构造函数不是const的,就会收到该警告。在某些情况下,这可能是因为Flutter无法确定对象是否是不可变的,因此它会发出警告,以提醒你可能需要将构造函数声明为const。
修改后的代码
@immutable
class TaskWidget extends StatefulWidget {
final String title;
final bool isChecked;
final int order;
const TaskWidget({
required this.title,
required this.isChecked,
required this.order,
Key? key,
}) : super(key: key);
@override
State<TaskWidget> createState() => _TaskWidgetState();
}
标签:declared,required,const,Constructors,immutable,key,final,构造函数
From: https://blog.51cto.com/u_15777557/8549983