在DART中,如果要创建不可修改的列表,可以使用List.unModiable()或UnModifiableListView

List<int> list = [1, 2, 3];
List<int> unmodifiableList = List.unmodifiable(list);
UnmodifiableListView unmodifiableListView = UnmodifiableListView(list);

这个有什么不同?

推荐答案

List.unmodifiable是一个List构造函数;它创建一个新的List对象.它创造了原始Listcopy个,并且那个副本不能变异.更改原始List不会影响副本.

UnmodifiableListView是原始List的包装器("视图"),原始List不能通过UnmodifiableListView进行变异.在UnmodifiableListView号中仍然可以观察到原始List的Mutations .

例如:

import 'dart:collection';

void main() {
  var originalList = [1, 2, 3];
  var unmodifiableCopy = List<int>.unmodifiable(originalList);
  var unmodifiableView = UnmodifiableListView(originalList);
  
  originalList[0] = -1;
  print('$unmodifiableCopy'); // Prints: [1, 2, 3]
  print('$unmodifiableView'); // Prints: [-1, 2, 3]
}

Dart相关问答推荐

从扩展类访问抽象类属性

如何在 ListView 中添加额外的底部间距?

结合freezed和hive

Flutter - 为什么滑块不会在 AlertDialog 中更新?

在Flatter中,依赖项必须指定版本号?

在 Windows 10 中使用 Android Studio 时没有Remove Widget选项

如何在 Dart 中使用类型Aliases/Typedefs(也是非函数)?

更新复选框并从Flutter对话框中返回值

单击 TextField 小部件时 Flutter 小部件重建

Flutter列表视图底部溢出

Flutter 使用什么 colored颜色 系统,为什么我们使用 `const Color` 而不是 `new Color`

如何判断设备是否需要 SafeArea?

Dart null 安全性不适用于类字段

如何在 Dart 中将字符串转换为 utf8?

polymer SEO 是否友好?

如何在抽象类中声明工厂构造函数?

dart 是否支持运算符重载

用一个 catch 表达式在 Dart 中捕获多种特定的异常类型

如何重新引发异常并保留堆栈跟踪?

在 Dart 中克​​隆list列表、map或set集合