Skip to content
Snippets Groups Projects
Commit 1b0a6126 authored by Benoît Harrault's avatar Benoît Harrault
Browse files

Pick different words for wrong propositions

parent 00f3a1cf
No related branches found
No related tags found
1 merge request!9Resolve "Pick different words"
Pipeline #951 passed
org.gradle.jvmargs=-Xmx1536M
android.useAndroidX=true
android.enableJetifier=true
app.versionName=0.0.7
app.versionCode=7
app.versionName=0.0.8
app.versionCode=8
......@@ -3,8 +3,8 @@ import 'package:flutter/foundation.dart';
class Data extends ChangeNotifier {
// randomization
bool _searchingWord = false;
String _word = '';
List _otherWords = [];
Map<String, String> _image = {
'1': null,
'2': null,
......@@ -12,17 +12,17 @@ class Data extends ChangeNotifier {
'4': null,
};
bool get searchingWord => _searchingWord;
String get word => _word;
set searchingWord(bool value) {
_searchingWord = value;
set updateWord(String value) {
_word = value;
notifyListeners();
}
String get word => _word;
List get otherWords => _otherWords;
set updateWord(String value) {
_word = value;
set updateOtherWords(List words) {
_otherWords = words;
notifyListeners();
}
......@@ -37,6 +37,7 @@ class Data extends ChangeNotifier {
void resetGame() {
_word = '';
_otherWords = [];
notifyListeners();
}
}
......@@ -6,7 +6,7 @@ import '../utils/random_pick_word.dart';
import '../utils/get_image_from_word.dart';
class GamePickWordPage extends StatelessWidget {
String _randomWord = '';
int _count = 4;
Future<void> startGame(BuildContext context, Data myProvider) async {
await pickWord(context, myProvider);
......@@ -17,19 +17,23 @@ class GamePickWordPage extends StatelessWidget {
}
Future<void> pickWord(BuildContext context, Data myProvider) async {
myProvider.searchingWord = true;
List words;
RandomPickWord randomPickWord;
int attempts = 0;
do {
randomPickWord = RandomPickWord();
await randomPickWord.init();
if (randomPickWord.word != null) {
myProvider.updateWord = randomPickWord.word;
myProvider.searchingWord = false;
await randomPickWord.init(_count);
if (randomPickWord.words != null) {
words = randomPickWord.words;
break;
}
attempts++;
} while (attempts < 3);
if ((words != null) && (words.length == _count)) {
myProvider.updateWord = words.take(1).toList()[0];
myProvider.updateOtherWords = words.skip(1).toList();
}
}
Future<void> pickImage(BuildContext context, Data myProvider, String word, int index) async {
......@@ -103,9 +107,16 @@ class GamePickWordPage extends StatelessWidget {
);
}
Column _buildTextItemsBlock(String word) {
Column _buildTextItemsBlock(String word, List otherWords) {
Color color = Colors.white;
List words = [
word,
otherWords.length > 0 ? otherWords[0] : null,
otherWords.length > 1 ? otherWords[1] : null,
otherWords.length > 2 ? otherWords[2] : null,
];
return Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
......@@ -114,16 +125,16 @@ class GamePickWordPage extends StatelessWidget {
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
children: [
_buildTextContainer(word, color),
_buildTextContainer(word, color),
_buildTextContainer(words[0], color),
_buildTextContainer(words[1], color),
],
),
Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
children: [
_buildTextContainer(word, color),
_buildTextContainer(word, color),
_buildTextContainer(words[2], color),
_buildTextContainer(words[3], color),
],
)
],
......@@ -159,7 +170,7 @@ class GamePickWordPage extends StatelessWidget {
),
),
SizedBox(height: 20),
_buildTextItemsBlock(_myProvider.word),
_buildTextItemsBlock(_myProvider.word, _myProvider.otherWords),
],
),
),
......
......@@ -13,7 +13,7 @@ class RandomPickImage {
await imageFromLocalFile(word);
}
Future<void> imageFromLocalFile(word) async {
Future<void> imageFromLocalFile(String word) async {
String jsonString;
try {
jsonString = await rootBundle.loadString('assets/assets_images.json');
......
import 'dart:async';
import 'dart:convert';
import 'package:flutter/services.dart';
import 'dart:math' show Random;
class RandomPickWord {
RandomPickWord();
String _word;
final random = Random();
List _words;
init() async {
await wordFromLocalFile();
init(int count) async {
_words = new List(count);
await wordFromLocalFile(count);
}
Future<void> wordFromLocalFile() async {
String jsonString;
Future<void> wordFromLocalFile(int count) async {
// Get global words list
List wordList = [];
try {
jsonString = await rootBundle.loadString('assets/files/words-fr.json');
String jsonString = await rootBundle.loadString('assets/files/words-fr.json');
final jsonResponse = await json.decode(jsonString);
var wordList = jsonResponse[jsonResponse.keys.toList().join()];
int randomWordIndex = random.nextInt(wordList.length);
String word = wordList[random.nextInt(wordList.length)];
_word = word ?? 'UNEXPECTED ERROR';
wordList = jsonResponse['words'];
} catch (e) {
_word = 'UNEXPECTED ERROR';
print("$e");
}
// Check we have enough words
if (wordList.length < count) {
print('Not enough words in list.');
}
// Randomize words list
wordList.shuffle();
// Pick first words from shuffled list
_words = wordList.take(count).toList();
}
String get word => _word;
List get words => _words;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment