得到以下问题,但无法解决,有人可以帮助我解决此问题。
该类继承自标记为@immutable的类,因此应该是不可变的(所有实例字段必须为final)。 dart(must_be_immutable)
谢谢。
答案 0 :(得分:11)
当所有类变量都未声明为final时,会发生此问题。您可以将它们设置为final,也可以忽略该警告,可以在类声明上方添加以下注释:
//ignore: must_be_immutable
答案 1 :(得分:3)
确保您在类中的所有实例变量都标记为final,并且该对象也标记为final。
在课堂上
class Items {
final String title;
final String author;
final String event;
final String img;
Items({this.title, this.author, this.event, this.img});
}
您所在的内部小部件
final Items item2 = new Items(
title: "Country",
author: "Balaji",
event: "4 Items",
img: "assets/panda.png",
);
答案 2 :(得分:2)
使用这种方式
class Frog extends StatelessWidget {
const Frog({
Key key,
this.color = const Color(0xFF2DBD3A),
this.child,
}) : super(key: key);
final Color color;
final Widget child;
@override
Widget build(BuildContext context) {
return Container(color: color, child: child);
}
}
答案 3 :(得分:2)
flutter 中有一些编码是前缀,其中之一是无状态小部件是不可变的,因此我们在根类中使用 Final 关键字定义了所有变量。如果我们将所有变量定义为 Final,那么这个错误将从给定的类中消除。
要消除错误,我们必须将所有变量定义为 Final,例如 final String abc = 'hello'
;。要了解有关此错误解决方案的更多信息,您可以阅读 Flutter 官方文档 here。
final、const 和 @immutable
如果我们将这些属性设为 final
会怎样?
class Product {
final String id;
final String name;
final Color color;
const Product({
this.id,
this.name,
this.color,
}) ;
}
正如预期的那样,添加 final
意味着我们不能再像以前那样为 id
、name
和颜色赋值。
我们还可以在此处添加 const 关键字,因为构造函数正在使用我们的最终字段初始化 Product 类,使其成为编译时常量。
我们还可以将 @immutable
注释添加到我们的类中,如果任何字段不是最终字段,则会显示错误:
@immutable
class Product {
String id;
final String name;
final Color color;
Product({
this.id,
this.name,
this.color,
});
}
答案 4 :(得分:0)
扩展StatelessWidget的类中的所有字段都应为最终字段。
来自文档。
StatelessWidget类。不需要可变状态的小部件。
https://docs.flutter.io/flutter/widgets/StatelessWidget-class.html
答案 5 :(得分:0)
从Flutter文档中获取:
以下是称为GreenFrog的无状态小部件子类的框架。 通常,小部件具有更多的构造函数参数,每个参数都对应于一个final属性。
就这样
class IconContainer extends StatelessWidget {
final double size;
final Color color;
final IconData icon;
IconContainer(this.icon, {this.color=Colors.white, this.size=32});
Widget build(BuildContext context) {
//TODO...
}