Flutter唯一ID生成插件nanoid2的使用

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

Flutter唯一ID生成插件nanoid2的使用

简介

nanoid2 是一个用于在Flutter和Dart项目中生成唯一ID的插件。它是 ai/nanoid 的Dart实现,并且提供了一个更加符合Dart风格的API。

Nano ID logo by Anton Lovchikov

安装

在您的项目中安装 nanoid2 插件,可以通过以下命令:

dart pub add nanoid2

或者在您的 pubspec.yaml 文件中添加依赖:

dependencies:
  nanoid2: ^latest_version # 替换为最新版本号

然后运行 dart pub get 来获取新的依赖包。

使用方法

基本用法

导入 nanoid2 包并调用 nanoid() 函数来生成默认长度(21个字符)的唯一ID:

import 'package:nanoid2/nanoid2.dart';

void main() {
  final id = nanoid(); 
  print(id); // 输出类似 LXL0J9b-Uj1C0sZH837Fk, 21个字符
}

自定义长度

通过传递 length 参数可以指定生成ID的长度:

import 'package:nanoid2/nanoid2.dart';

void main() {
  final String longId = nanoid(length: 64);
  print(longId); // 输出64个字符长的ID
}

自定义字符集

您还可以自定义生成ID时使用的字符集,或使用预定义的字符集:

import 'package:nanoid2/nanoid2.dart';

void main() {
  // 使用自定义字符集
  print(nanoid(alphabet: '13579')); // 只包含奇数
  print(nanoid(alphabet: '1234567890abcdef')); // 十六进制小写

  // 使用预定义字符集
  print(nanoid(alphabet: Alphabet.url)); // 默认字符集[a-zA-Z0-9_-],64个字符
  print(nanoid(alphabet: Alphabet.numbers)); // 数字[0-9],10个字符
  print(nanoid(alphabet: Alphabet.hexadecimalLowercase)); // 十六进制小写[0-9a-f],16个字符
  print(nanoid(alphabet: Alphabet.hexadecimalUppercase)); // 十六进制大写[0-9A-F],16个字符
  print(nanoid(alphabet: Alphabet.lowercase)); // 小写字母[a-z],26个字符
  print(nanoid(alphabet: Alphabet.uppercase)); // 大写字母[A-Z],26个字符
  print(nanoid(alphabet: Alphabet.alphanumeric)); // 字母数字[a-zA-Z0-9],62个字符
  print(nanoid(alphabet: Alphabet.base64)); // Base64字符[a-zA-Z0-9+/],64个字符

  // 不含相似字符的字符集
  print(nanoid(alphabet: Alphabet.noDoppelganger)); // 49个字符,不含易混淆字符
  print(nanoid(alphabet: Alphabet.noDoppelgangerSafe)); // 36个字符,不含易混淆字符且不会形成英文单词
}

可预测的ID生成

为了测试目的,您可以使用固定的随机种子来生成相同的ID序列:

import 'dart:math';
import 'package:nanoid2/nanoid2.dart';

void predictableNanoIds() {
  final random = Random(42);
  for (int i = 0; i < 3; i++) {
    final id = nanoid(random: random);
    print(id);
  }

  print(nanoid(length: 10, random: random));
}

这将确保每次运行代码时都生成相同的ID序列,这对于单元测试非常有用。

示例代码

下面是一个完整的示例程序,演示了如何使用 nanoid2 插件的各种功能:

// ignore_for_file: avoid_print

import 'dart:math';
import 'package:nanoid2/nanoid2.dart';

void main() {
  // 生成默认长度的ID
  final String defaultId = nanoid();
  print('Default ID ($defaultId)'); // 21个字符

  // 生成指定长度的ID
  final String customLengthId = nanoid(length: 64);
  print('Custom Length ID ($customLengthId)'); // 64个字符长

  // 测试自定义字符集和可预测ID生成
  customAlphabet();
  predictableNanoIds();
}

void customAlphabet() {
  // 使用自定义字符集
  print('Only odd numbers (${nanoid(alphabet: '13579')})');
  print('Hex lowercase (${nanoid(alphabet: '1234567890abcdef')})');

  // 使用预定义字符集
  print('URL safe (${nanoid(alphabet: Alphabet.url)})');
  print('Numbers only (${nanoid(alphabet: Alphabet.numbers)})');
  print('Hex lowercase (${nanoid(alphabet: Alphabet.hexadecimalLowercase)})');
  print('Hex uppercase (${nanoid(alphabet: Alphabet.hexadecimalUppercase)})');
  print('Lowercase (${nanoid(alphabet: Alphabet.lowercase)})');
  print('Uppercase (${nanoid(alphabet: Alphabet.uppercase)})');
  print('Alphanumeric (${nanoid(alphabet: Alphabet.alphanumeric)})');
  print('Base64 (${nanoid(alphabet: Alphabet.base64)})');
  print('No doppelgangers (${nanoid(alphabet: Alphabet.noDoppelganger)})');
  print('No doppelgangers safe (${nanoid(alphabet: Alphabet.noDoppelgangerSafe)})');
}

/// For testing, use a seeded random to generate the same IDs every time.
void predictableNanoIds() {
  final random = Random(42);
  for (int i = 0; i < 3; i++) {
    final id = nanoid(random: random);
    print('Predictable ID $i: $id');
  }
  
  print('Short predictable ID: ${nanoid(length: 10, random: random)}');
}

这段代码展示了如何生成不同类型的唯一ID,并且包括了如何创建可预测的ID以供测试使用。希望这对您有所帮助!如果您有任何问题,请随时提问。


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

1 回复

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


当然,以下是如何在Flutter项目中使用nanoid2插件来生成唯一ID的代码示例。

首先,你需要在你的pubspec.yaml文件中添加nanoid2依赖:

dependencies:
  flutter:
    sdk: flutter
  nanoid2: ^1.0.0  # 请检查最新版本号

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

安装完成后,你可以在你的Flutter项目中使用nanoid2来生成唯一ID。以下是一个简单的示例,展示如何在Dart代码中生成和使用唯一ID。

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'NanoID2 Demo',
      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();
    // 生成唯一ID
    generateUniqueId();
  }

  void generateUniqueId() async {
    // 使用nanoid2生成唯一ID
    String id = await Nanoid2.nanoid();
    setState(() {
      uniqueId = id;
    });
    print('Generated Unique ID: $uniqueId');
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('NanoID2 Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Unique ID:',
              style: TextStyle(fontSize: 20),
            ),
            SizedBox(height: 10),
            Text(
              uniqueId,
              style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold),
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: generateUniqueId,
        tooltip: 'Generate New ID',
        child: Icon(Icons.refresh),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,包含一个按钮和一个显示唯一ID的文本。点击按钮时,会调用generateUniqueId方法,该方法使用nanoid2插件生成一个新的唯一ID,并将其显示在屏幕上。

注意:

  1. Nanoid2.nanoid() 是一个异步函数,因此我们使用 await 关键字等待其完成。
  2. 我们使用 setState 方法来更新UI,以便显示新生成的唯一ID。

希望这个示例对你有帮助!

回到顶部