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.'); _word = ''; } else { final _random = new Random(); _word = wordList.elementAt(_random.nextInt(wordList.length)); } print('Picked word: ' + _word); } static bool checkWordExists(String word) { return dictionary.contains(word); } }