此类继承自标记为@immutable的类,因此应为不可变的(所有实例字段必须为final)

时间:2019-02-15 10:51:33

标签: visual-studio flutter

得到以下问题,但无法解决,有人可以帮助我解决此问题。

  

该类继承自标记为@immutable的类,因此应该是不可变的(所有实例字段必须为final)。 dart(must_be_immutable)

Click the image here

谢谢。

6 个答案:

答案 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)

  1. flutter 中有一些编码是前缀,其中之一是无状态小部件是不可变的,因此我们在根类中使用 Final 关键字定义了所有变量。如果我们将所有变量定义为 Final,那么这个错误将从给定的类中消除。

  2. 要消除错误,我们必须将所有变量定义为 Final,例如 final String abc = 'hello';。要了解有关此错误解决方案的更多信息,您可以阅读 Flutter 官方文档 here

finalconst@immutable

如果我们将这些属性设为 final 会怎样?

class Product {
  final String id;
  final String name;
  final Color color;

  const Product({
    this.id,
    this.name,
    this.color,
  }) ;
}

正如预期的那样,添加 final 意味着我们不能再像以前那样为 idname 和颜色赋值。

我们还可以在此处添加 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...
}