DART/FLUTTER-检查类值是否已经实例化



我在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
});
}

最新更新