Flutter唯一标识符生成插件objectid的使用

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

Flutter唯一标识符生成插件objectid的使用

ObjectId 插件简介

ObjectId 是一个用于Dart语言的高性能、跨平台的ObjectId实现。它具有以下特点:

  • 🚀 快速
  • 📱 跨平台支持
  • 🧪 测试充分
  • 📑 符合bson ObjectId 规范
  • 📝 文档齐全

Dart tests codecov pub package License: MIT style: effective dart

开始使用

1. 添加依赖

pubspec.yaml 文件中添加 objectid 依赖:

dependencies:
  objectid: ^3.1.0

然后运行 flutter pub get 来安装依赖。

2. 使用示例代码

基本用法

import 'package:objectid/objectid.dart';

void main() {
  // 创建一个新的ObjectId实例
  final id = ObjectId();
  print(id);   // 输出: 5f52c805df41c9df948e6135
  print(id.hexString); // 输出: 5f52c805df41c9df948e6135
}

从十六进制字符串创建ObjectId

import 'package:objectid/objectid.dart';

void main() {
  // 从十六进制字符串创建ObjectId实例
  final id = ObjectId.fromHexString('5f52c805df41c9df948e6135');
  print(id.hexString); // 输出: 5f52c805df41c9df948e6135

  final id2 = ObjectId.fromHexString(id.hexString);
  print(id == id2); // 输出: true
}

从字节数组创建ObjectId

import 'package:objectid/objectid.dart';

void main() {
  // 从字节数组创建ObjectId实例
  final id = ObjectId.fromBytes([95, 82, 205, 121, 180, 195, 28, 88, 32, 47, 183, 78]);
  print(id.hexString); // 输出: 5f52cd79b4c31c58202fb74e

  // 获取ObjectId的字节数组表示
  print(id.bytes); // 输出: [95, 82, 205, 121, 180, 195, 28, 88, 32, 47, 183, 78]

  final id2 = ObjectId.fromBytes(id.bytes);
  print(id == id2); // 输出: true
}

从特定值创建ObjectId

import 'package:objectid/objectid.dart';

void main() {
  // 从特定值创建ObjectId实例
  final zeroed = ObjectId.fromValues(0, 0, 0);
  print(zeroed.hexString); // 输出: 000000000000000000000000

  final withTimestamp = ObjectId.fromValues(0x3e7fffffc18, 0, 0);
  print(withTimestamp.hexString); // 输出: ffffffff0000000000000000

  final withProcessUnique = ObjectId.fromValues(0, 0xffffffffff, 0);
  print(withProcessUnique.hexString); // 输出: 00000000ffffffffff000000

  final withCounter = ObjectId.fromValues(0, 0, 0xffffff);
  print(withCounter.hexString); // 输出: 000000000000000000ffffff

  final filled = ObjectId.fromValues(0x3e7fffffc18, 0xffffffffff, 0xffffff);
  print(filled.hexString); // 输出: ffffffffffffffffffffffff
}

从时间戳创建ObjectId

import 'package:objectid/objectid.dart';

void main() {
  // 从时间戳创建ObjectId实例
  final id = ObjectId.fromTimestamp(DateTime.now());
  print(id.hexString); // 输出: 5f52d05e0000000000000000
}

属性和方法

  • hexString: 返回ObjectId的24位十六进制字符串表示。
  • timestamp: 返回ObjectId生成的时间戳(精确到秒)。
  • bytes: 返回ObjectId的字节数组表示。
  • hashCode: 返回ObjectId的哈希码。
  • isValid(String hexString): 静态方法,检查提供的十六进制字符串是否为有效的ObjectId。

性能基准测试

在MacBook Pro (13-inch, M2, 2022) 上进行的性能基准测试结果如下:

构造函数/属性 运行时间 (us)
ObjectId() 0.29132956069161253
ObjectId.fromHexString() 0.75057425
ObjectId.fromBytes() 0.14730780908787755
ObjectId.fromValues() 0.07130824418248206
ObjectId.fromTimestamp() 0.044412125467054496
ObjectId.hexString 0.039307475449695345
ObjectId.timestamp 0.050248475
ObjectId.hashCode 0.03570540247334531
ObjectId == ObjectId 0.12478619550684174

更多详细的性能基准测试可以在示例应用程序中找到。

完整示例Demo

以下是一个完整的Flutter应用示例,展示了如何在Flutter项目中使用 objectid 插件生成唯一标识符:

import 'package:flutter/material.dart';
import 'package:objectid/objectid.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'ObjectId Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: ObjectIdPage(),
    );
  }
}

class ObjectIdPage extends StatefulWidget {
  @override
  _ObjectIdPageState createState() => _ObjectIdPageState();
}

class _ObjectIdPageState extends State<ObjectIdPage> {
  String _objectId = '';

  void _generateObjectId() {
    final id = ObjectId();
    setState(() {
      _objectId = id.hexString;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('ObjectId Generator'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Generated ObjectId:',
              style: TextStyle(fontSize: 18),
            ),
            SizedBox(height: 20),
            Text(
              _objectId.isEmpty ? 'Click the button to generate' : _objectId,
              style: TextStyle(fontSize: 16, color: Colors.grey),
            ),
            SizedBox(height: 40),
            ElevatedButton(
              onPressed: _generateObjectId,
              child: Text('Generate ObjectId'),
            ),
          ],
        ),
      ),
    );
  }
}

这个示例应用包含了一个按钮,点击按钮后会生成一个新的ObjectId并显示在屏幕上。希望这些信息对您有所帮助!


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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用objectid插件来生成唯一标识符的代码示例。这个插件通常用于需要生成类似MongoDB ObjectId的唯一标识符的场景。

首先,确保你已经在你的Flutter项目中添加了objectid插件。你可以通过以下步骤添加它:

  1. 在你的pubspec.yaml文件中添加依赖项:
dependencies:
  flutter:
    sdk: flutter
  objectid: ^x.y.z  # 请替换为最新版本号
  1. 运行flutter pub get来安装依赖项。

接下来,你可以在你的Flutter应用中使用objectid插件来生成唯一标识符。以下是一个简单的示例,展示了如何在Flutter应用中生成并使用这个唯一标识符:

import 'package:flutter/material.dart';
import 'package:objectid/objectid.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter ObjectId 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();
    // 生成唯一标识符
    generateUniqueId();
  }

  void generateUniqueId() async {
    // 使用 ObjectId 插件生成唯一标识符
    ObjectId objectId = await ObjectId.generate();
    // 将生成的唯一标识符设置为 state
    setState(() {
      uniqueId = objectId.toHexString();
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter ObjectId 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),
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: generateUniqueId,
        tooltip: 'Generate Unique ID',
        child: Icon(Icons.refresh),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,它使用objectid插件生成一个唯一标识符,并在界面上显示它。你可以点击浮动操作按钮(FAB)来重新生成一个新的唯一标识符。

  • ObjectId.generate() 方法是异步的,所以我们在generateUniqueId函数中使用await关键字来等待它完成。
  • 使用setState方法更新UI,以便在生成新的唯一标识符时刷新显示。

希望这个示例能帮助你理解如何在Flutter项目中使用objectid插件生成唯一标识符。如果你有任何进一步的问题或需要更多帮助,请随时提问!

回到顶部