具有不变列表的Dart不变对象

brvekthn  于 2022-12-06  发布在  其他
关注(0)|答案(1)|浏览(117)

我试图创建一个不可变的类,因为它是EventArgs类的一种。我想知道如何创建constimmutable字段。这是我目前所拥有的:

import 'package:meta/meta.dart';

@immutable
class ConnectedDevicesChangedEventArgs {
  final Iterable<String> devices;

  const ConnectedDevicesChangedEventArgs(Iterable<String> d)
      : devices = const List.unmodifiable(d); // error on const
}

我收到一个错误消息:
正在调用的构造函数不是const构造函数。请尝试从构造函数调用中移除“const”。dartconst_with_non_const
本人有以下要求:

  • 任何访问EventArgs类的人都不允许更改devices
  • 不允许访问EventArgs类的任何人在devices中添加/删除任何内容
  • devices永远不会改变

由于只有一个final变量,因此将此构造函数设置为const是否是一个好的做法?
我读过这篇文章:https://dart.dev/guides/language/language-tour#constant-constructors

46qrfjad

46qrfjad1#

一个final List.unmodifyable()既不能被更改为一个不同的列表,也不能修改列表本身。
但是,它不能满足Dart对const构造函数的要求,即整个示例可以在编译时计算。
在这种情况下,只需省略const关键字。

相关问题