generateWordPairs function

Iterable<WordPair> generateWordPairs({
  1. TypeOfPair typeOfPair = TypeOfPair.randomPair,
  2. Random? random,
})

Implementation

Iterable<WordPair> generateWordPairs(
    {TypeOfPair typeOfPair = TypeOfPair.randomPair, Random? random}) sync* {
  final rand = random ?? _random;

  String pickRandom(List<String> list) => list[rand.nextInt(list.length)];

  // We're in a sync* function, so `while (true)` is okay.
  // ignore: literal_only_boolean_expressions
  while (true) {
    String firstWord;
    String secondWord;

    switch (typeOfPair) {
      case TypeOfPair.adjectiveAdjective:
        firstWord = pickRandom(adjectives);
        secondWord = pickRandom(adjectives);
        break;
      case TypeOfPair.nounNoun:
        firstWord = pickRandom(nouns);
        secondWord = pickRandom(nouns);
        break;
      case TypeOfPair.verbVerb:
        firstWord = pickRandom(verbs);
        secondWord = pickRandom(verbs);
        break;
      case TypeOfPair.adjectiveNoun:
        firstWord = pickRandom(adjectives);
        secondWord = pickRandom(nouns);
        break;
      case TypeOfPair.verbAdjective:
        firstWord = pickRandom(verbs);
        secondWord = pickRandom(adjectives);
        break;
      case TypeOfPair.verbNoun:
        firstWord = pickRandom(verbs);
        secondWord = pickRandom(nouns);
        break;
      case TypeOfPair.randomPair:
        firstWord = pickRandom(allWords);
        secondWord = pickRandom(allWords);
        break;
    }

    final WordPair wordPair = WordPair(firstWord, secondWord);

    yield wordPair;
  }
}