103 votes

Comment générer un identifiant unique dans Dart

J'écris des chats websocket. Comment générer un identifiant unique pour l'utilisateur ?

maintenant j'utilise ce code :

id = new DateTime.now().millisecondsSinceEpoch;

Y a-t-il une solution plus propre ?

158voto

Chris Buckett Points 6329

1. Il y a un paquet pub UUID :

http://pub.dartlang.org/packages/uuid

exemple d'utilisation :

import 'package:uuid/uuid.dart';

// Create uuid object
var uuid = Uuid();

// Generate a v1 (time-based) id
uuid.v1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a'

// Generate a v4 (random) id
uuid.v4(); // -> '110ec58a-a0f2-4ac4-8393-c866d813b8d1'

// Generate a v5 (namespace-name-sha1-based) id
uuid.v5(uuid.NAMESPACE_URL, 'www.google.com'); // -> 'c74a196f-f19d-5ea9-bffd-a2742432fc9c'

2. Ce src a un générateur de GUID dart

https://github.com/MikeMitterer/AndroidIconGenerator.DART/blob/445884924/lib/src/model/communication/GUIDGen.dart

Je ne posterai pas directement la fonction src ici car il n'y a pas de licence apparente avec elle, mais l'exemple d'utilisation est le suivant :

final String uuid = GUIDGen.generate();

59voto

Pascal Points 1655

En 2020, vous pourrez faire UniqueKey(); qui est une classe intégrée :

https://api.flutter.dev/flutter/widgets/UniqueKey-class.html

Note

Une clé qui n'est égale qu'à elle-même.

Elle ne peut pas être créée avec un constructeur const car cela implique que toutes les clés instanciées seraient la même instance et que ne sont donc pas uniques.

9voto

Jonathan Points 20

En plus de l'uuid, vous pouvez également essayer ceci pour générer de petites clés uniques :

https://pub.dev/packages/nanoid

Ils ont même un calculateur de collision :

https://zelark.github.io/nano-id-cc/

3voto

dev001 Points 53

J'utilise microsecondes au lieu de millisecondes qui est beaucoup plus précis et il n'est pas nécessaire d'ajouter un paquet.

 String idGenerator() {
    final now = DateTime.now();
    return now.microsecondsSinceEpoch.toString();
  }

0voto

34m0 Points 1710

Si vous aimez les identifiants de style MongoDB, vous pouvez considérer ce petit paquet qui vous aidera à créer l'identifiant de l'objet :

https://pub.dev/packages/crossplat_objectid

import 'package:bson_objectid/bson_objectid.dart';

main() {
  ObjectId id1 = new ObjectId();
  print(id1.toHexString());

  ObjectId id2 = new ObjectId.fromHexString('54495ad94c934721ede76d90');
  print(id2.timestamp);
  print(id2.machineId);
  print(id2.processId);
  print(id2.counter);
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X