Select Git revision
-
Benoît Harrault authoredBenoît Harrault authored
data.dart 3.94 KiB
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();
}
}