Flutter唯一标识符插件xid的使用
Flutter唯一标识符插件xid的使用
Globally Unique ID Generator
此项目 https://github.com/pitabwire/xid 是对Go语言库 https://github.com/rs/xid 的Dart实现。
ReadMe 来自该项目(带有一些针对Dart的修改)。
xid
包是一个全局唯一的ID生成器库,可以直接安全地用于服务器代码中。它使用Mongo Object ID算法生成全局唯一的ID,并采用不同的序列化方式(base64)使其在作为字符串传输时更短:MongoDB Object ID 文档。
- 4字节表示自Unix纪元以来的秒数
- 3字节机器标识符
- 2字节进程ID
- 3字节计数器,从随机值开始
二进制形式的ID与Mongo 12字节Object ID兼容。字符串表示使用base32 hex(无填充)以提高空间效率(20字节)。使用hex变体的base32是为了保留ID的可排序属性。
xid
不使用base64,因为大小写敏感和两个非字母数字字符可能在作为字符串传输到各种系统时出现问题。Base36未被选择是因为:
- 它不是标准
- 结果大小不可预测(非位对齐)
- 它将不再保持可排序性
要验证一个base32 xid
,请期待一个20个字符长,全部小写的由字母a
到v
和数字0
到9
组成的序列(正则表达式为[0-9a-v]{20}
)。
名称 | 二进制大小 | 字符串大小 | 特点 |
---|---|---|---|
UUID | 16字节 | 36字符 | 无需配置,不可排序 |
shortuuid | 16字节 | 22字符 | 无需配置,不可排序 |
Snowflake | 8字节 | 最多20字符 | 需要机器/数据中心配置,需要中心服务器,可排序 |
MongoID | 12字节 | 24字符 | 无需配置,可排序 |
xid | 12字节 | 20字符 | 无需配置,可排序 |
功能特性
- 尺寸:12字节(96位),比UUID小,比Snowflake大
- 默认使用base32 hex编码(作为可打印字符串传输时为20个字符,仍然可排序)
- 无需配置,不需要设置唯一的机器和/或数据中心ID
- K-ordered(K有序)
- 内置时间精度为1秒
- 每秒每主机/进程保证16,777,216(24位)个唯一ID的唯一性
引用
使用方法
import 'dart:developer';
import 'package:xid/xid.dart';
void main() {
var xid = Xid();
log('generated id: $xid');
}
// 输出示例: generated id: 9m4e2mr0ui3e8a215n4g
示例代码
下面是一个完整的Flutter示例,展示了如何在Flutter应用程序中使用xid
插件来生成唯一标识符:
示例:xid_example.dart
import 'package:flutter/material.dart';
import 'package:xid/xid.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'XID Example',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'XID Example'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key? key, required this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
String _generatedId = '';
void _generateId() {
setState(() {
_generatedId = Xid().toString();
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Generated XID:',
),
Text(
'$_generatedId',
style: Theme.of(context).textTheme.headline4,
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _generateId,
tooltip: 'Generate XID',
child: Icon(Icons.add),
),
);
}
}
如何运行示例
- 确保你已经安装了Flutter环境。
- 创建一个新的Flutter项目或在现有项目中添加
xid
依赖项:dependencies: flutter: sdk: flutter xid: ^最新版本号
- 运行
flutter pub get
以获取依赖项。 - 将上述代码粘贴到你的
lib/main.dart
文件中。 - 运行应用程序,点击浮动按钮生成新的XID。
通过以上步骤,你可以在Flutter应用程序中轻松使用xid
插件生成全局唯一的标识符。
更多关于Flutter唯一标识符插件xid的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter唯一标识符插件xid的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是关于如何在Flutter项目中使用xid
插件来获取唯一标识符的代码示例。xid
是一个轻量级的Flutter插件,用于生成全局唯一的标识符(UUID)。
1. 添加依赖
首先,在你的pubspec.yaml
文件中添加xid
插件的依赖:
dependencies:
flutter:
sdk: flutter
xid: ^2.0.0 # 请根据需要选择最新版本
然后运行以下命令来安装依赖:
flutter pub get
2. 使用xid
生成唯一标识符
接下来,在你的Flutter项目中导入xid
包,并使用它来生成唯一标识符。以下是一个简单的示例:
import 'package:flutter/material.dart';
import 'package:xid/xid.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter XID Example',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
String? uniqueId;
@override
void initState() {
super.initState();
// 生成唯一标识符
final id = Xid().toString();
setState(() {
uniqueId = id;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter XID Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Unique ID:',
style: TextStyle(fontSize: 20),
),
SizedBox(height: 10),
Text(
uniqueId ?? 'Generating...',
style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold),
),
],
),
),
);
}
}
代码解释
- 依赖添加:在
pubspec.yaml
中添加xid
依赖,并运行flutter pub get
命令安装。 - 导入包:在Dart文件中导入
xid
包。 - 生成唯一标识符:在
initState
方法中,使用Xid().toString()
生成一个唯一标识符,并将其存储在uniqueId
状态变量中。 - 显示唯一标识符:在
build
方法中,使用Text
组件显示生成的唯一标识符。
运行项目
确保你已经正确安装了所有依赖,并在你的开发环境中运行Flutter项目:
flutter run
运行后,你应该能够在应用界面上看到生成的唯一标识符。
希望这个示例能够帮助你理解如何在Flutter项目中使用xid
插件来生成唯一标识符。