Flutter 生成 UUID

84 min read

文档

安装

flutter pub add uuid

开始

说明

  1. 打开命令行并 cd 到您的项目根文件夹
  2. 在您的 pubspec 中,将 dart-uuid 的条目添加到您的依赖项中(示例如下)
  3. 发布安装
  4. 如果你想运行测试,进入 packages/dart-uuid/ 并运行 'dart test/uuid_test.dart'

发布规范

有 2 个选项。直接来自 git,或来自 pub.dartlang.org

pub.dartlang.org:(如果你总是想要最新的,你可以使用'any'而不是版本)

dependencies:
  uuid: 3.0.6
import 'package:uuid/uuid.dart';

var uuid = Uuid();

然后创建一些ID ...

// 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'

接口

Uuid({Map<String, dynamic> options: null}) -> Uuid (Constructor)

构造函数支持设置一些全局 RNG 序列,因此您不必在 v4 或 v5 的每个函数调用中指定它们

  • options- (Map<String, dynamic>) 要应用的可选 uuid 状态。属性可能包括:
    • grng- (功能)随机#生成器用作全局rng函数。一个自定义函数,它返回一个字节值列表 [16] 或提供的 2 个字节值中的 1 个。
    • gNamedArgs- (Map<Symbol, dynamic>) 要传递给全局 rng 函数的参数和值。
    • gPositionalArgs- (列表)全局 rng 函数的位置参数,如果有的话。
    • v1rng- (功能)随机#生成器用作v1种子的rng函数。一个自定义函数,它返回一个字节值列表 [16] 或提供的 2 个字节值中的 1 个。
    • v1rngNamedArgs- (Map<Symbol, dynamic>) 要传递给 v1 rng 函数的参数和值。
    • v1rngPositionalArgs- (列表)v1 rng 函数的位置参数,如果有的话。

默认值为Uuid.mathRNG

示例:全局使用 CryptoRNG

var uuid = Uuid(options: {
  'grng': UuidUtil.cryptoRNG
})

// Generate a v4 (random) id that will use cryptRNG for its rng function
uuid.v4();

uuid.v1({Map<String, dynamic> options: null) -> String

uuid.v1obj({Map<String, dynamic> options: null) -> UuidValue

uuid.v1buffer(列表

生成并返回 RFC4122 v1(基于时间戳)UUID。

  • options- (Map<String, dynamic>) 要应用的可选 uuid 状态。属性可能包括:
    • node- (列表
    • clockseq- (0 - 0x3fff 之间的数字)RFC 时钟序列。默认值:一个 内部 (内部) 使用维护的clockseq。
    • msecs- (数字)自 unix 以来的时间(以毫秒为单位) 时代 (时代) . 默认值:使用当前时间。
    • nsecs- (0-9999 之间的数字)额外时间,以 100- 纳秒 (纳秒) 单位。忽略如果msecs是 未指定 (不详) . 默认值:根据 4.2.1.2 使用内部 uuid 计数器。
  • buffer- (列表
  • offset``buffer- (Int)开始写入的起始索引。

v1() 返回 uuid 的字符串表示形式。

v1buffer() 返回一个列表

v1obj() 返回一个 UuidValue,它有一个验证检查和一些包装字符串的内部函数。

示例:使用完全指定的选项生成字符串 UUID

uuid.v1(options: {
    'node': [0x01, 0x23, 0x45, 0x67, 0x89, 0xab],
    'clockSeq': 0x1234,
    'mSecs': new DateTime.utc(2011,11,01).millisecondsSinceEpoch,
    'nSecs': 5678
})   // -> "710b962e-041c-11e1-9234-0123456789ab"

示例:就地生成两个二进制 ID

// Generate two ids in an array
var myBuffer = new List(32); // -> []
uuid.v1buffer(myBuffer);
// -> [115, 189, 5, 128, 201, 91, 17, 225, 146, 52, 109, 0, 9, 0, 52, 128, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null]
uuid.v1buffer(myBuffer, offset: 16);  
// -> [115, 189, 5, 128, 201, 91, 17, 225, 146, 52, 109, 0, 9, 0, 52, 128, 115, 189, 5, 129, 201, 91, 17, 225, 146, 52, 109, 0, 9, 0, 52, 128]

// Optionally use uuid.unparse() to get stringify the ids
uuid.unparse(myBuffer);    // -> '73bd0580-c95b-11e1-9234-6d0009003480'
uuid.unparse(myBuffer, offset: 16) // -> '73bd0581-c95b-11e1-9234-6d0009003480'

示例:UuidValue 用法

uuidValue = uuid.v1Obj(options: {
    'node': [0x01, 0x23, 0x45, 0x67, 0x89, 0xab],
    'clockSeq': 0x1234,
    'mSecs': new DateTime.utc(2011,11,01).millisecondsSinceEpoch,
    'nSecs': 5678
}) // -> UuidValue{uuid: '710b962e-041c-11e1-9234-0123456789ab'}

print(uuidValue) -> // -> '710b962e-041c-11e1-9234-0123456789ab'
uuidValue.toBytes() -> // -> [...]

uuid.v4({Map<String, dynamic> options: null}) -> String

uuid.v4obj({Map<String, dynamic> options: null}) -> UuidValue

uuid.v4buffer(列表

生成并返回 RFC4122 v4 UUID。

  • options- (Map<String, dynamic>) 要应用的可选 uuid 状态。属性可能包括:
    • random- (Number[16]) 16 个数字 (0-255) 的列表,用于代替 随机 (常) 生成的值
    • rng- (功能)随机#生成器使用。一个自定义函数,它返回一个字节值列表 [16] 或提供的 2 个字节值中的 1 个。
    • namedArgs- (Map<Symbol, dynamic>) 要传递给函数的参数和值。
    • positionalArgs- (列表)函数的位置参数。如果有的话。
  • buffer- (列表
  • offset``buffer- (数字)开始写入的起始索引。

v4() 返回 uuid 的字符串表示形式。

v4buffer() 返回一个列表

v4obj() 返回一个 UuidValue,它有一个验证检查和一些包装字符串的内部函数。

示例:使用不同的 RNG 方法生成字符串 UUID

import 'package:uuid/uuid_util.dart';
uuid.v4(options: {
  'rng': UuidUtil.cryptoRNG
});
// -> "109156be-c4fb-41ea-b1b4-efe1671c5836"

示例:使用不同的 RNG 方法和命名参数生成字符串 UUID

import 'package:uuid/uuid_util.dart';
uuid.v4(options: {
  'rng': UuidUtil.mathRNG,
  'namedArgs': new Map.fromIterables([const Symbol('seed')],[1])
});
// -> "09a91894-e93f-4141-a3ec-82eb32f2a3ef"

示例:使用不同的 RNG 方法和位置参数生成字符串 UUID

import 'package:uuid/uuid_util.dart';
uuid.v4(options: {
  'rng': UuidUtil.cryptoRNG,
  'positionalArgs': [1]
});
// -> "09a91894-e93f-4141-a3ec-82eb32f2a3ef"

示例:使用完全指定的选项生成字符串 UUID

uuid.v4(options: {
  'random': [
    0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea,
    0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36
  ]
});
// -> "109156be-c4fb-41ea-b1b4-efe1671c5836"

示例:在单个缓冲区中生成两个 ID

var myBuffer = new List(32);
uuid.v4buffer(myBuffer);
uuid.v4buffer(myBuffer, offset: 16);

示例:UuidValue 用法

uuidValue = uuid.v4obj(options: {
  'random': [
    0x10, 0x91, 0x56, 0xbe, 0xc4, 0xfb, 0xc1, 0xea,
    0x71, 0xb4, 0xef, 0xe1, 0x67, 0x1c, 0x58, 0x36
  ]
}) // -> UuidValue{uuid: '109156be-c4fb-41ea-b1b4-efe1671c5836'}

print(uuidValue) -> // -> '109156be-c4fb-41ea-b1b4-efe1671c5836'
uuidValue.toBytes() -> // -> [...]

uuid.v5(String namespace, String name, {Map<String, dynamic> options: null}) -> String

uuid.v5obj(String namespace, String name, {Map<String, dynamic> options: null}) -> UuidValue

uuid.v5buffer(字符串命名空间,字符串名称,列表

生成并返回 RFC4122 v5 UUID。

  • options- (Map<String, dynamic>) 要应用的可选 uuid 状态。属性可能包括:
    • randomNamespace-(布尔值)默认为真。如果您想要 v4 生成的命名空间 (true) 或 NAMESPACE_NIL (false),则返回
  • buffer- (列表
  • offset``buffer- (数字)开始写入的起始索引。

v5() 返回 uuid 的字符串表示形式。

v5buffer() 返回一个列表

v5obj() 返回一个 UuidValue,它有一个验证检查和一些包装字符串的内部函数。

示例:使用完全指定的选项生成字符串 UUID

uuid.v5(Uuid.NAMESPACE_URL, 'www.google.com');
// -> "c74a196f-f19d-5ea9-bffd-a2742432fc9c"

示例:在单个缓冲区中生成两个 ID

var myBuffer = new List(32);
uuid.v5buffer(Uuid.NAMESPACE_URL, 'www.google.com', myBuffer);
uuid.v5buffer(Uuid.NAMESPACE_URL, 'www.google.com', myBuffer, offset: 16);

示例:UuidValue 用法

uuidValue = uuid.v5obj(Uuid.NAMESPACE_URL, 'www.google.com'); 
// -> UuidValue(uuid: "c74a196f-f19d-5ea9-bffd-a2742432fc9c")

print(uuidValue) -> // -> 'c74a196f-f19d-5ea9-bffd-a2742432fc9c'
uuidValue.toBytes() -> // -> [...]

uuid.parse(字符串 uuid,{列表

uuid.parseAsByteList(字符串 uuid,{列表

uuid.unparse(列表

解析和反解析 UUID

  • id- (String) UUID(-like) 字符串
  • buffer- (列表)要写入 UUID 字节的数组或缓冲区。默认值:使用新的数组或缓冲区
  • offset``buffer- (Int | Number)开始写入的起始索引。默认值:0
  • validate- (bool, default: true) 允许您禁用 UUID 验证,这对于 Microsoft GUID 废话非常有用。

抛出: parse() -> FormatException - 当不是有效的 UUID 时 unparse() -> 异常 - 当列表内容的长度不是 16 时

解析和反解析 UUID 字符串的示例

var bytes = uuid.parse('797ff043-11eb-11e1-80d6-510998755d10'); // -> [121, 127, 240, 67, 17, 235, 17, 225, 128, 214, 81, 9, 152, 117, 93, 16]
var string = uuid.unparse(bytes); // -> '797ff043-11eb-11e1-80d6-510998755d10'