Flutter安全整数ID生成插件safe_int_id的使用
Flutter安全整数ID生成插件safe_int_id的使用
简介
SafeIntId
是一个用于生成符合 Number.MAX_SAFE_INTEGER
的非协调唯一ID的Flutter插件。它特别适用于需要在多个设备上生成不重复ID的应用场景。
现有解决方案
有许多优秀的唯一ID生成方案,例如Cuid2、KSUID、Nano ID、ObjectId等。然而,这些方案并不完全满足我们的特殊需求。
需求
- ID应适合64位带符号整数。
- ID应适合Web平台上的安全整数范围(±(2⁵³-1))。
- 在没有网络协调的情况下,在多个位置生成ID。
- 不同时间生成的ID应该完全没有碰撞概率。
- 在上述约束条件下,ID应尽可能唯一。
可选功能
- ID可以按创建时间排序。
- 可以从ID中提取创建时间戳。
- ID可以是URL友好的。
- ID可以选择包含自增计数器而不是随机部分。
设计与使用
导入库
首先,导入safe_int_id
库:
import 'package:safe_int_id/safe_int_id.dart';
获取新ID
获取一个新的ID:
final id = safeIntId.getId();
print("id: $id");
获取创建时间
获取给定ID的创建时间:
final createdAt = safeIntId.getCreatedAt(id, isUtc: true);
print("createdAt: $createdAt");
使用自增计数器
如果在同一设备上生成大量ID,可以使用incId()
方法代替getId()
:
final id1 = safeIntId.incId();
final id2 = safeIntId.incId();
assert(id1 < id2);
自定义配置
可以通过自定义配置来调整ID生成逻辑:
final customId = SafeIntId(
firstYear: 2023, // 第一年
random: Random(), // 随机生成器
randomValues: 1024, // 每毫秒可能的随机值数量
);
// 安全年数
assert(customId.safeYears == 278);
// 最后安全年份
assert(customId.lastSafeYear == 2300);
示例代码
以下是一个完整的示例代码,展示了如何使用SafeIntId
:
/// Example of how to use `SafeIntId`.
/// Run it with `dart run --enable-asserts example/safe_int_id_example.dart`
import "dart:math";
import "package:safe_int_id/safe_int_id.dart";
void main() {
// Get a new uncoordinated unique ID
final id = safeIntId.getId();
print("id: $id");
// Get [DateTime] when given [id] was created at.
final createdAt = safeIntId.getCreatedAt(id, isUtc: true);
print("createdAt: $createdAt");
// Increment a counter instead of using a random value.
final id1 = safeIntId.incId();
final id2 = safeIntId.incId();
assert(id1 < id2);
// Custom configuration, defaults are:
final customId = SafeIntId(
firstYear: 2023, // The first year you use this ID.
random: Random(), // Random generator, e.g. `Random.secure()`
randomValues: 1024, // Number of possible random values per millisecond.
);
// How many years since [firstYear] this ID will be safe:
assert(customId.safeYears == 278);
// Last year this ID will be safe:
assert(customId.lastSafeYear == 2300);
// Custom configuration has the same [getId] and [getCreatedAt] methods:
assert(!customId.getCreatedAt(customId.getId()).isBefore(createdAt));
}
通过上述示例代码,您可以轻松地在Flutter应用中集成并使用safe_int_id
插件来生成唯一的整数ID。
更多关于Flutter安全整数ID生成插件safe_int_id的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter安全整数ID生成插件safe_int_id的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用safe_int_id
插件生成安全整数ID的示例代码。safe_int_id
插件允许你生成一个64位的安全整数ID,这在需要唯一标识符时非常有用。
首先,确保你的Flutter项目中已经添加了safe_int_id
插件。如果还没有添加,可以在pubspec.yaml
文件中添加以下依赖:
dependencies:
flutter:
sdk: flutter
safe_int_id: ^x.y.z # 请替换为最新的版本号
然后运行flutter pub get
来安装插件。
以下是一个完整的Flutter应用示例,展示了如何使用safe_int_id
插件生成安全整数ID:
import 'package:flutter/material.dart';
import 'package:safe_int_id/safe_int_id.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Safe Int ID Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: SafeIntIdDemo(),
);
}
}
class SafeIntIdDemo extends StatefulWidget {
@override
_SafeIntIdDemoState createState() => _SafeIntIdDemoState();
}
class _SafeIntIdDemoState extends State<SafeIntIdDemo> {
String? generatedId;
void _generateId() async {
// 使用SafeIntId.generate()方法生成安全整数ID
int? id = await SafeIntId.generate();
setState(() {
generatedId = id.toString();
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Safe Int ID Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Generated ID:',
style: TextStyle(fontSize: 20),
),
SizedBox(height: 10),
Text(
generatedId ?? 'Press the button to generate an ID',
style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: _generateId,
child: Text('Generate ID'),
),
],
),
),
);
}
}
在这个示例中,我们创建了一个简单的Flutter应用,包含一个按钮和一个显示生成ID的文本。当点击按钮时,会调用SafeIntId.generate()
方法生成一个安全整数ID,并将其显示在界面上。
请确保在实际项目中替换safe_int_id: ^x.y.z
为当前最新的版本号,以获取最新的功能和修复。