Select Git revision
app_bar.dart
-
Benoît Harrault authoredBenoît Harrault authored
random_pick.dart 3.16 KiB
import 'dart:async';
import 'package:html/parser.dart';
import 'package:html/dom.dart';
import 'package:http/http.dart' as http;
import 'dart:convert';
import 'package:flutter/services.dart';
import 'dart:math' show Random;
import 'package:diacritic/diacritic.dart';
import 'package:list_french_words/list_french_words.dart';
class RandomPick {
final String level;
RandomPick(this.level);
String _url;
String _word;
String _clue;
final random = Random();
init() async {
switch (level) {
case 'Thèmes':
await wordFromLocal();
break;
case 'Avancé':
_url = 'https://www.palabrasaleatorias.com/mots-aleatoires.php?fs=1&fs2=0&Submit=Nouveau+mot';
await wordFromWeb(_url);
break;
case 'Junior':
_url = 'https://www.palabrasaleatorias.com/mots-aleatoires.php?fs=1&fs2=1&Submit=Nouveau+mot';
await wordFromWeb(_url);
break;
case 'Expert':
await wordFromPackage();
break;
default:
await wordFromLocal();
}
}
Future<void> wordFromWeb(String url) async {
try {
var response = await http.Client().get(Uri.parse(url));
if (response.statusCode == 200) {
var html = parse(utf8.decode(response.bodyBytes));
Element element = html.getElementsByTagName('div').last;
String word = _validate(element.text);
if (word == null) {
throw Exception();
}
_word = word;
} else {
throw Exception();
}
} catch (e) {
_word = null;
}
}
String _validate(String word) {
String wordToValidate = word.trim();
if (wordToValidate.contains(' ')) {
return null;
}
wordToValidate = removeDiacritics(wordToValidate);
wordToValidate = wordToValidate.toUpperCase();
wordToValidate = wordToValidate.replaceAll(RegExp('[0-9]'), '');
wordToValidate = wordToValidate.replaceAll(RegExp('[^A-Z]'), '');
if (wordToValidate.length < 3 || wordToValidate.length > 12) {
return null;