【发布时间】:2013-03-11 00:42:13
【问题描述】:
我写 websocket 聊天。 如何为用户生成唯一ID?
现在我使用这个代码:
id = new DateTime.now().millisecondsSinceEpoch;
还有更简洁的解决方案吗?
【问题讨论】:
标签: unique dart identity uuid uniqueidentifier
我写 websocket 聊天。 如何为用户生成唯一ID?
现在我使用这个代码:
id = new DateTime.now().millisecondsSinceEpoch;
还有更简洁的解决方案吗?
【问题讨论】:
标签: unique dart identity uuid uniqueidentifier
1.有一个UUID pub包:
http://pub.dartlang.org/packages/uuid
示例用法:
import 'package:uuid/uuid.dart';
// Create uuid object
var uuid = 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'
2. 这个 src 有一个 dart GUID 生成器
src函数没有明显的license,这里就不直接贴了,示例用法如下:
final String uuid = GUIDGen.generate();
【讨论】:
在 2020 年,您可以做 UniqueKey();,这是一个内置类:
https://api.flutter.dev/flutter/widgets/UniqueKey-class.html
注意
一个只与自己相等的键。
这不能用 const 构造函数创建,因为这意味着所有实例化的键都是同一个实例,因此不是唯一的。
【讨论】:
UniqueKey().toString() 来获取可以保存在数据库中的唯一字符串文字。 Flutter 团队重写了UniqueKey 类的toString() 方法,返回与键关联的底层id,check here。
如果你喜欢 MongoDB 风格的 id,你可以考虑这个有助于创建对象 id 的小包:
https://pub.dev/packages/crossplat_objectid
import 'package:bson_objectid/bson_objectid.dart';
main() {
ObjectId id1 = new ObjectId();
print(id1.toHexString());
ObjectId id2 = new ObjectId.fromHexString('54495ad94c934721ede76d90');
print(id2.timestamp);
print(id2.machineId);
print(id2.processId);
print(id2.counter);
}
【讨论】:
【讨论】:
还有https://pub.dev/packages/xid,它是无锁的,保证每秒和每个主机/进程有 16,777,216(24 位)唯一 ID 的唯一性
import 'package:xid/xid.dart';
void main() {
var xid = Xid();
print('generated id: $xid');
}
【讨论】: