gpt4 book ai didi

flutter - Dart 封装列表(仅用于观察值)

转载 作者:行者123 更新时间:2023-12-03 04:18:09 32 4
gpt4 key购买 nike

我有以下 list

List<ProductVariation> _productVariations = []; avoid null pointer exceptions
List<ProductVariation> get productVariations => _productVariations;
添加 List<ProductVariation> get productVariations => _productVariations; 的主要目标是为了避免 _productVariations要修改,但是,我可以在列表中添加、删除或执行任何操作,我该如何防止 productVariations从另一个文件访问时要修改?

最佳答案

另一种解决方案是使用 UnmodifiableListView来自 dart:collection这可能会更有效率,因为您没有制作列表的新副本,而只是为您的 List 提供 protected View 。 :

import 'dart:collection';

class A {
final List<int> _data = [1, 2, 3];
UnmodifiableListView<int> get data => UnmodifiableListView(_data);
}

void main() {
final a = A();
print(a.data); // [1, 2, 3]
a.data.add(5); // Unhandled exception: Unsupported operation: Cannot add to an unmodifiable list
}
此解决方案的缺点是 UnmodifiableListView是正常的 List从分析器的角度来看,因此您不会因此而得到任何静态错误。但是,如果您尝试修改列表本身,则会在运行时遇到异常。为了让开发人员更清楚,我认为指定返回类型为 UnmodifiableListView 很好。即使你可以只写 List反而。
另一点是,如果对象不是不可变的,则此解决方案(或 Jigar Patel 建议的解决方案)不会阻止您修改列表中的对象本身。因此,如果您还想防止这些更改,您需要制作对象的深拷贝。

关于flutter - Dart 封装列表(仅用于观察值),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64289805/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com