Flutter唯一标识符插件xid的使用

发布于 1周前 作者 yibo5220 来自 Flutter

Flutter唯一标识符插件xid的使用

Globally Unique ID Generator

Build Status

此项目 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未被选择是因为:

  1. 它不是标准
  2. 结果大小不可预测(非位对齐)
  3. 它将不再保持可排序性

要验证一个base32 xid,请期待一个20个字符长,全部小写的由字母av和数字09组成的序列(正则表达式为[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),
      ),
    );
  }
}

如何运行示例

  1. 确保你已经安装了Flutter环境。
  2. 创建一个新的Flutter项目或在现有项目中添加xid依赖项:
    dependencies:
      flutter:
        sdk: flutter
      xid: ^最新版本号
    
  3. 运行flutter pub get以获取依赖项。
  4. 将上述代码粘贴到你的lib/main.dart文件中。
  5. 运行应用程序,点击浮动按钮生成新的XID。

通过以上步骤,你可以在Flutter应用程序中轻松使用xid插件生成全局唯一的标识符。


更多关于Flutter唯一标识符插件xid的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于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),
            ),
          ],
        ),
      ),
    );
  }
}

代码解释

  1. 依赖添加:在pubspec.yaml中添加xid依赖,并运行flutter pub get命令安装。
  2. 导入包:在Dart文件中导入xid包。
  3. 生成唯一标识符:在initState方法中,使用Xid().toString()生成一个唯一标识符,并将其存储在uniqueId状态变量中。
  4. 显示唯一标识符:在build方法中,使用Text组件显示生成的唯一标识符。

运行项目

确保你已经正确安装了所有依赖,并在你的开发环境中运行Flutter项目:

flutter run

运行后,你应该能够在应用界面上看到生成的唯一标识符。

希望这个示例能够帮助你理解如何在Flutter项目中使用xid插件来生成唯一标识符。

回到顶部