如何在Dart中生成唯一ID

kar*_*sev 30 uuid identity unique uniqueidentifier dart

我写websocket聊天.如何为用户生成唯一ID?

现在我用这个代码:

id = new DateTime.now().millisecondsSinceEpoch;
Run Code Online (Sandbox Code Playgroud)

有没有更整洁的解决方案?

Pas*_*cal 46

在 2020 年,你可以做UniqueKey();一个内置的类:

https://api.flutter.dev/flutter/widgets/UniqueKey-class.html

笔记

一个只等于它自己的键。

这不能用 const 构造函数创建,因为这意味着所有实例化的键都是同一个实例,因此不是唯一的。

  • 我认为这个类的预期用途是用于 Widget,而不是用作数据库中的 ID。 (11认同)
  • @Rutrus如果您看一下该类,您可以清楚地看到它创建了一个仅在应用程序内部唯一的密钥。这意味着,如果您将密钥保存在应用程序外部(例如数据库中),则稍后可能会再次重新创建相同的唯一密钥。[检查此处](https://github.com/flutter/flutter/blob/f139b11009/packages/flutter/lib/src/widgets/framework.dart#L42) 从第 83 行到第 103 行,如果您愿意,还有一个讨论看看它 (5认同)
  • @Rufus,这与加密无关,如果它适用于您的实用程序,那么您应该使用它。就像他们说的“如果它有效,就不要碰它!” (2认同)
  • @Gino,您可以使用`UniqueKey().toString()`来获取可以保存在数据库中的唯一字符串文字。Flutter 团队重写了 `UniqueKey` 类的 `toString()` 方法,以返回与密钥关联的底层 id,[查看此处](https://github.com/flutter/flutter/blob/f139b11009/packages /flutter/lib/src/widgets/framework.dart#L42)。 (2认同)

Chr*_*ett 43

1.有一个UUID pub包:

http://pub.dartlang.org/packages/uuid

示例用法:

// Generate a v1 (time-based) id
uuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a'

// Generate a v4 (random) id
uuid.v4(); // -> '110ec58a-a0f2-4ac4-8393-c866d813b8d1'

// Generate a v5 (namespace-name-sha1-based) id
uuid.v5(uuid.NAMESPACE_URL, 'www.google.com'); // -> 'c74a196f-f19d-5ea9-bffd-a2742432fc9c'
Run Code Online (Sandbox Code Playgroud)

2.这SRC具有镖GUID发生器

https://github.com/MikeMitterer/AndroidIconGenerator.DART/blob/master/lib/src/model/communication/GUIDGen.dart

我不会直接在这里发布函数src,因为它没有明显的许可证,但示例用法如下:

final String uuid = GUIDGen.generate();
Run Code Online (Sandbox Code Playgroud)

  • 请注意:这不依赖于强大的随机数据.因此,生成的UUID不应被视为加密强.无论重要与否,我都会留给读者来决定. (5认同)

dev*_*001 24

我使用微秒而不是毫秒,这样更准确,并且不需要添加任何包。

 String idGenerator() {
    final now = DateTime.now();
    return now.microsecondsSinceEpoch.toString();
  }
Run Code Online (Sandbox Code Playgroud)

  • 对在 Flutter Web 上使用此值的任何人发出警告:“请注意,此值不适合 53 位(IEEE 双精度数的大小)。JavaScript 数字无法保存此值。”。 (3认同)

小智 5

除了 uuid,您还可以尝试使用此方法生成小的唯一键:

https://pub.dev/packages/nanoid

他们甚至有一个碰撞计算器:

https://zelark.github.io/nano-id-cc/