我在Dart 中有一个具有以下属性的类
class StartValue {
final int id;
final String firstName;
final String lastName;
StartValue({this.id, this.firstName, this.lastName})
}
我会用以下值来启动该类:
StartValue(
id: 1,
firstName: 'First',
lastName: 'LastName'
)
问题是,我需要做什么样的验证才能永远不再实例化NAME='First'的类StartValue?假设我只能实例化一次类,firstName="First"。
我如何进行实例验证以验证每个实例不包含firstName=";第一个">
我必须做一些类似的事情:
StartValues.contains("First")
请记住,我已经实例化了近1000个类,因此我必须逐一检查值";第一个";包含在每个类中,这是我的问题
您必须遍历每个类来检查是否使用了firstName,但我建议使用==运算符而不是.contains((。为什么要有1000个实例?你能把我们放在上下文中吗?
使用迄今为止看到的所有id的类静态集。这将快速识别项目是否已经生成。
类似于:
class Person {
final int id;
final String name;
static var seenIds = <int>{};
Person({
required this.id,
required this.name,
}) {
if (!seenIds.add(id)) throw ArgumentError('id $id already seen');
}
}
将数千个实例/名称保留在内存中是一种糟糕的设计,因为它们太多了,您现在不需要它们。你可以选择像sqflite这样的本地sql数据库,也可以选择像cloud Firestore这样的云数据库来获取你需要的用户并对其进行验证
如果你仍然想在内存中执行,你可以使用工厂构造函数、私有构造函数和静态HashSet来检查用户实例。
如果你需要解释,请在下面评论。完整代码示例:
import 'dart:collection';
class Person {
final int id;
final String firstName;
final String lastName;
static HashSet<String> allNames = HashSet<String>();
factory Person({
required int id,
required String firstName,
required String lastName,
}) {
if (!allNames.add(firstName)) {
throw ArgumentError("Person with firstname $firstName already exists");
}
return Person._(id: id, firstName: firstName, lastName: lastName);
}
Person._({
required this.id,
required this.firstName,
required this.lastName
});
}