Select Git revision
game_cubit.dart
-
Benoît Harrault authoredBenoît Harrault authored
random_pick_word.dart 2.35 KiB
import 'dart:async';
import 'dart:convert';
import "dart:math";
import 'package:flutter/services.dart';
class RandomPickWord {
static Set<String> wordList = <String>{};
static Set<String> dictionary = <String>{};
static String _lang = '';
static int _length = 5;
static String _level = '';
RandomPickWord();
String _word = '';
String get word => _word;
init(String lang, int length, String level) async {
if (lang != _lang || length != _length || level != _level || wordList.isEmpty || dictionary.isEmpty) {
_lang = lang;
_length = length;
_level = level;
dictionary.clear();
wordList.clear();
String wordBaseFilename = 'words-' + length.toString() + '-' + lang;
// Get full dictionary (eligible words)
print('Reload dictionary / ' + lang + ' / ' + length.toString());
try {
String wordsFile = wordBaseFilename + '-' + 'dictionary';
var data = await rootBundle.loadString('assets/files/' + wordsFile + '.txt');
LineSplitter.split(data).forEach((line) {
if (line.length == length) {
dictionary.add(line.toUpperCase());
}
});
} catch (e) {
throw "Failed loading dictionary database";
}
// Get guessable words list (will pick random word from)
print('Reload words list / ' + lang + ' / ' + length.toString() + ' / ' + level);
try {
String wordsFile = wordBaseFilename + '-' + level;
var data = await rootBundle.loadString('assets/files/' + wordsFile + '.txt');
LineSplitter.split(data).forEach((line) {
if (line.length == length) {
wordList.add(line.toUpperCase());
}
});
} catch (e) {
throw "Failed loading words database";
}
}
print('Words in dictionary: ' + dictionary.length.toString());
print('Words in words list: ' + wordList.length.toString());
_word = '';
await wordFromLocalFile();
}
Future<void> wordFromLocalFile() async {
// Check we have enough words
if (wordList.length < 1) {
print('Not enough words in list.');