generateCode static method

Future<String> generateCode({
  1. required String path,
  2. required String key,
  3. int length = 6,
  4. String charSet = "23456789abcdefghjkmnpqrstuvwxy",
})

Create a code of length length randomly for id.

Characters that are difficult to understand are omitted.

If the data of key in path contains the generated random value, the random value is generated again.

Implementation

static Future<String> generateCode({
  required String path,
  required String key,
  int length = 6,
  String charSet = "23456789abcdefghjkmnpqrstuvwxy",
}) async {
  List<String> generated = [];
  do {
    // await Future.delayed(Duration(milliseconds: Random().nextInt(100)));
    generated = List.generate(
      10,
      (index) => katana.generateCode(length, charSet: charSet),
    );
    final snapshot = await LocalDatabase._db.loadDocument(
      LocalStoreDocumentQuery(path: path),
    );
    if (snapshot != null) {
      for (final map in snapshot.values) {
        if (map.isEmpty || !map.containsKey(key)) {
          continue;
        }
        generated.remove(map.get(key, ""));
      }
    }
  } while (generated.isEmpty);
  return generated.first;
}