Skip to content
Snippets Groups Projects
Select Git revision
  • 76fa1783b0a39098eae8fc36539474473765c0e8
  • master default protected
  • 61-upgrade-framework-and-dependencies
  • 42-improve-app-metadata
  • 17-improve-and-complete-offline-words-list-and-tips
  • 6-allow-translate-application
  • 9-improve-documentation
  • Release_1.10.0_44 protected
  • Release_1.9.2_43 protected
  • Release_1.9.1_42 protected
  • Release_1.9.0_41 protected
  • Release_1.8.0_40 protected
  • Release_1.7.0_39 protected
  • Release_1.6.0_38 protected
  • Release_1.5.2_37 protected
  • Release_1.5.1_36 protected
  • Release_1.5.0_35 protected
  • Release_1.4.1_34 protected
  • Release_1.4.0_33 protected
  • Release_1.3.2_32 protected
  • Release_1.3.1_31 protected
  • Release_1.3.0_30 protected
  • Release_1.2.18_29 protected
  • Release_1.2.17_28 protected
  • Release_1.2.16_27 protected
  • Release_1.2.15_26 protected
  • Release_1.2.14_25 protected
27 results

random_pick.dart

Blame
  • 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;