import 'package:flutter/foundation.dart'; import 'package:shared_preferences/shared_preferences.dart'; class Data extends ChangeNotifier { // Configuration available values List _availableLangValues = ['fr']; List _availableWordLengthValues = ['5']; List _availableSkinValues = ['default']; List get availableLangValues => _availableLangValues; List get availableWordLengthValues => _availableWordLengthValues; List get availableSkinValues => _availableSkinValues; // Application default configuration String _lang = ''; String _langDefault = 'fr'; String _length = ''; String _lengthDefault = '5'; String _skin = ''; String _skinDefault = 'default'; // Game data bool _gameIsRunning = false; String _word = ''; final int _recentWordsCount = 20; List _recentWords = []; List<String> _guesses = []; String _currentGuess = ''; int _maxGuessesCount = 7; String get lang => _lang; void updateLang(String lang) { _lang = lang; notifyListeners(); } String get length => _length; void updateLength(String length) { _length = length; notifyListeners(); } String get skin => _skin; void updateSkin(String skin) { _skin = skin; notifyListeners(); } List<String> get guesses => _guesses; String get currentGuess => _currentGuess; int get maxGuessesCount => _maxGuessesCount; void currentGuessAddLetter(String letter) { if (_currentGuess.length < int.parse(_length)) { _currentGuess = _currentGuess + letter; notifyListeners(); } } void currentGuessRemoveLetter() { if (_currentGuess.length > 0) { _currentGuess = _currentGuess.substring(0, _currentGuess.length - 1); notifyListeners(); } } void currentGuessSubmitWord() { if (_currentGuess.length == int.parse(_length)) { print('check word: '+_currentGuess); if (_currentGuess != _word) { print('wrong'); } else { print('ok found'); } addGuess(_currentGuess); notifyListeners(); } } void addGuess(String word) { print('addGuess('+word+')'); _guesses.add(word); _currentGuess = ''; } getParameterValue(String parameterCode) { switch(parameterCode) { case 'lang': { return _lang; } break; case 'length': { return _length; } break; case 'skin': { return _skin; } break; } } List getParameterAvailableValues(String parameterCode) { switch(parameterCode) { case 'lang': { return _availableLangValues; } break; case 'length': { return _availableWordLengthValues; } break; case 'skin': { return _availableSkinValues; } break; } return []; } setParameterValue(String parameterCode, String parameterValue) async { switch(parameterCode) { case 'lang': { updateLang(parameterValue); } break; case 'length': { updateLength(parameterValue); } break; case 'skin': { updateSkin(parameterValue); } break; } final prefs = await SharedPreferences.getInstance(); prefs.setString(parameterCode, parameterValue); } void initParametersValues() async { final prefs = await SharedPreferences.getInstance(); setParameterValue('lang', prefs.getString('lang') ?? _langDefault); setParameterValue('length', prefs.getString('length') ?? _lengthDefault); setParameterValue('skin', prefs.getString('skin') ?? _skinDefault); } bool get gameIsRunning => _gameIsRunning; void updateGameIsRunning(bool gameIsRunning) { _gameIsRunning = gameIsRunning; notifyListeners(); } String get word => _word; void updateWord(String word) { _word = word; if (word != null) { _recentWords.insert(0, word); _recentWords = _recentWords.take(_recentWordsCount).toList(); } notifyListeners(); } bool isRecentlyPicked(String word) { return _recentWords.contains(word); } void resetGame() { _word = ''; _guesses = []; _currentGuess = ''; notifyListeners(); } }