首页 > 其他分享 >Constructors in '@immutable' classes should be declared as 'const'.

Constructors in '@immutable' classes should be declared as 'const'.

时间:2023-11-24 14:31:55浏览次数:35  
标签:declared required const Constructors immutable key final 构造函数

警告信息

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

相关文章