import 'dart:async'; import 'dart:convert'; import 'package:flutter/services.dart'; import 'package:wordguessing/models/word.dart'; import 'package:wordguessing/utils/tools.dart'; class RandomPickWords { RandomPickWords(); List<Word> _words = []; init(String lang, int count) async { await wordsFromLocalFile(lang, count); } Future<void> wordsFromLocalFile(String lang, int count) async { List<Word> wordList = []; try { final String jsonString = await rootBundle.loadString('assets/words.json'); final jsonResponse = await json.decode(jsonString); final Map<String, dynamic> wordsMap = jsonResponse['words'] as Map<String, dynamic>; wordsMap.forEach((key, data) { final List<String> images = []; for (var image in (data['images'] as List<dynamic>)) { images.add(image as String); } images.shuffle(); if (images.isNotEmpty) { wordList.add(Word( key: key, text: data[lang] ?? '', images: images, )); } }); } catch (e) { printlog("$e"); } // Check we have enough words if (wordList.length < count) { printlog('Not enough words in list.'); } // Remove empty words wordList.removeWhere((word) => (word.text == '')); // Randomize words list wordList.shuffle(); // Pick first words from shuffled list _words = wordList.take(count).toList(); } List<Word> get words => _words; }