如果未传递ID,则Dart使用uuid初始化类ID

6xfqseft  于 2023-03-21  发布在  其他
关注(0)|答案(1)|浏览(98)

我正在创建一个类,它有一个ID字段,该字段在创建对象时生成。

const uuid = Uuid();

class Foo {
  final String id = uuid.v4();
  final String data;

  Foo(this.data);
}

我意识到这种方法将不再起作用,因为稍后我将在数据库中拥有现有的Id。因此,我希望能够在构造函数中设置Id,但如果Id没有作为参数传递,则生成它。
到目前为止,这让我找到了两个解决方案,但我并不满意。

选项1:只需调用uuid函数并预先传递一个readyid

class Foo {
  final String id;
  final String data;

  Foo(this.id, this.data);
}

foo = Foo(Uuid().v4, "Some data");

这 * 工作 *,但基本上避免了问题的全部。这将是更好的类自动处理它。

选项2:调用构造函数体中的uuid函数

const uuid = Uuid();

class Foo {
  String? id;
  final String data;

  Foo({this.id, required this.data}) {
    id ??= uuid.v4();
  }
}

这也可以 * 工作 *,但是因为id字段首先被设置为null,然后才被检查并替换为id,所以我们必须从它中剥离最后一个关键字。这非常糟糕。
你知道我还能做什么吗?

qnakjoqk

qnakjoqk1#

是的,好吧,我在问题的中间想出了一个答案。尽管如此,欢迎任何进一步的想法和改进!

class Foo {
  final String id;
  final String data;

  Foo({String? id, required this.data}) : id = id ?? uuid.v4();
}

我们可以只使用一个伪变量来保存null,而不是直接将其插入到final字段中。
编辑:正如注解中所指出的,您应该指定哑元变量的类型,因为它将默认为'dynamic'

相关问题