diff --git a/android/app/build.gradle b/android/app/build.gradle index fdffea3276520e6d5fc3e698db3e7a417f10f603..cb7269328de31c5e8756003fbb588f643e77d5ca 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -16,7 +16,7 @@ if (gradlePropertiesFile.exists()) { def flutterRoot = localProperties.getProperty('flutter.sdk') if (flutterRoot == null) { - throw new FileNotFoundException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") + throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") } def appVersionCode = gradleProperties.getProperty('app.versionCode') @@ -41,14 +41,10 @@ if (keystorePropertiesFile.exists()) { android { compileSdkVersion 31 - lintOptions { - disable 'InvalidPackage' - } - defaultConfig { applicationId "org.benoitharrault.hangman" - minSdkVersion 21 - targetSdkVersion 29 + minSdkVersion 16 + targetSdkVersion 30 versionCode appVersionCode.toInteger() versionName appVersionName archivesBaseName = "$applicationId" + "_" + "$versionCode" diff --git a/android/gradle.properties b/android/gradle.properties index d1c2e86f101166e03a020eb5a16427e079fa70a4..a316c7ce348427549dc57861194389d019399733 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -2,5 +2,5 @@ org.gradle.jvmargs=-Xmx1536M android.useAndroidX=true android.enableJetifier=true android.enableR8=true -app.versionName=1.2.4 -app.versionCode=15 +app.versionName=1.2.5 +app.versionCode=16 diff --git a/lib/provider/data.dart b/lib/provider/data.dart index b224e4eb163180b61fe8c152af7e999e5e6b8e56..e624d6015a45d74b4e0028351d07a9758c91caaf 100644 --- a/lib/provider/data.dart +++ b/lib/provider/data.dart @@ -11,7 +11,7 @@ class Data extends ChangeNotifier { String _levelValue = defaultLevel; // randomization - String _secretWord; + String _secretWord = ''; bool _searching = false; String _clue = ''; List<String> _hiddenWord = []; @@ -35,19 +35,24 @@ class Data extends ChangeNotifier { void _getPrefs() async { await _sharedPrefs.init(); - _gameModeValue = _sharedPrefs.gameMode ?? - onlineGameMode.keys.firstWhere((k) => onlineGameMode[k].contains(_sharedPrefs.level), - orElse: () => false); - _levelValue = onlineGameMode[_gameModeValue].contains(_sharedPrefs.level) + + _gameModeValue = onlineGameMode.keys.firstWhere( + (k) => onlineGameMode[k]?.contains(_sharedPrefs.level) ?? false, + orElse: () => false); + + _levelValue = onlineGameMode[_gameModeValue]?.contains(_sharedPrefs.level) ?? false ? _sharedPrefs.level - : onlineGameMode[_gameModeValue].first; - _victoryCount = _sharedPrefs.victoryCount ?? 0; - _defeatCount = _sharedPrefs.defeatCount ?? 0; + : onlineGameMode[_gameModeValue]?.first ?? ''; + + _victoryCount = _sharedPrefs.victoryCount; + _defeatCount = _sharedPrefs.defeatCount; notifyListeners(); } - bool get gameModePref => _sharedPrefs.gameMode ?? false; - String get levelPref => _sharedPrefs.level ?? onlineGameMode[gameModePref].first; + bool get gameModePref => _sharedPrefs.gameMode; + String get levelPref => (_sharedPrefs.level != '') + ? _sharedPrefs.level + : onlineGameMode[gameModePref]?.first ?? ''; void resetValues() => _getPrefs(); @@ -66,7 +71,7 @@ class Data extends ChangeNotifier { set updateGameMode(bool value) { _gameModeValue = value; setPrefGameMode = gameModeValue; - updateLevel = onlineGameMode[value].first; + updateLevel = onlineGameMode[value]?.first ?? ''; notifyListeners(); } @@ -95,8 +100,8 @@ class Data extends ChangeNotifier { String get hiddenWord => _hiddenWord.join(); - void updateHiddenWord(int index, String letra) { - _hiddenWord[index] = letra; + void updateHiddenWord(int index, String letter) { + _hiddenWord[index] = letter; notifyListeners(); } @@ -147,7 +152,7 @@ class Data extends ChangeNotifier { void resetGame() { _errors = 0; - _secretWord = null; + _secretWord = ''; _clue = ''; _hiddenWord = []; _usedLetters = []; diff --git a/lib/screens/game.dart b/lib/screens/game.dart index 2c039c4dd4e8e06b4d34dc8008dba80f5f5a1395..bfb2e5e8219d1e28f917614b2ad83eaa36d99ac2 100644 --- a/lib/screens/game.dart +++ b/lib/screens/game.dart @@ -15,7 +15,7 @@ class Game extends StatelessWidget { do { randompick = RandomPick(myProvider.levelPref); await randompick.init(); - if (randompick.word != null) { + if (randompick.word != '') { myProvider.updateSecretWord = randompick.word; myProvider.resetSuccessAndErrors(); myProvider.resetUsedLetters(); @@ -108,7 +108,7 @@ class Game extends StatelessWidget { } class ImgGallow extends StatelessWidget { - const ImgGallow({Key key}) : super(key: key); + const ImgGallow({Key? key}) : super(key: key); @override Widget build(BuildContext context) { Data _myProvider = Provider.of<Data>(context); @@ -126,13 +126,13 @@ class ImgGallow extends StatelessWidget { } class HiddenWord extends StatelessWidget { - const HiddenWord({Key key}) : super(key: key); + const HiddenWord({Key? key}) : super(key: key); @override Widget build(BuildContext context) { Data _myProvider = Provider.of<Data>(context); return FittedBox( child: Text( - (_myProvider.hiddenWord.isEmpty || _myProvider.hiddenWord == null) + (_myProvider.hiddenWord.isEmpty || _myProvider.hiddenWord == '') ? 'UNEXPECTED ERROR' : _myProvider.hiddenWord, style: TextStyle( diff --git a/lib/screens/home.dart b/lib/screens/home.dart index 6142e9eeb354c2c618c70fe74d5f50ff7f4e4d1a..6affdc69acdf9ca53a10630515c8898692dcf8d9 100644 --- a/lib/screens/home.dart +++ b/lib/screens/home.dart @@ -83,17 +83,18 @@ class Home extends StatelessWidget { children: [ Text('Niveau'), DropdownButton<String>( - value: _myProvider.levelValue ?? - onlineGameMode[_myProvider.gameModeValue].first, + value: _myProvider.levelValue != '' + ? _myProvider.levelValue + : onlineGameMode[_myProvider.gameModeValue]?.first, items: onlineGameMode[_myProvider.gameModeValue] - .map<DropdownMenuItem<String>>((String value) { + ?.map<DropdownMenuItem<String>>((String value) { return DropdownMenuItem<String>( value: value, child: Text(value), ); }).toList(), - onChanged: (String value) => - _myProvider.updateLevel = value, + onChanged: (String? value) => + _myProvider.updateLevel = value ?? '', ), ], ), @@ -110,10 +111,8 @@ class Home extends StatelessWidget { _myProvider.searching = true; bool control = true; await Game().pickWord(context, _myProvider); - if (_myProvider.secretWord == null || - _myProvider.secretWord == '' || - _myProvider.hiddenWord == null || - (_myProvider.hiddenWord?.isEmpty ?? true)) { + if (_myProvider.secretWord == '' || + _myProvider.hiddenWord == '') { control = false; var response = await Navigator.push( context, diff --git a/lib/utils/constants.dart b/lib/utils/constants.dart index 7b9aa37d491974c46cd3917a7cf1449a96aeb3f5..53cba215ffaa336845efc4b67a3255bf3e2aebf5 100644 --- a/lib/utils/constants.dart +++ b/lib/utils/constants.dart @@ -9,16 +9,10 @@ const Map<bool, List<String>> onlineGameMode = { const String defaultLevel = 'Thèmes'; -//colores +// Colors const int darkGreen = 0xff013220; const int board = 0xff004D00; const int accent = 0xffD81B60; -/* -<color name="colorPrimary">#008577</color> -<color name="colorPrimaryDark">#00574B</color> -<color name="colorAccent">#D81B60</color> -<color name="pizarra">#004D00</color> -*/ // GameOver enum GameOver { VICTORY, DEFEAT } @@ -29,14 +23,14 @@ extension GameOverExtension on GameOver { GameOver.DEFEAT: 'Pendu !', }; - String get title => titles[this]; + String get title => titles[this] ?? '?'; static const icons = { GameOver.VICTORY: Icons.military_tech, GameOver.DEFEAT: Icons.gavel, }; - IconData get icon => icons[this]; + IconData get icon => icons[this] ?? Icons.error; } const victory = GameOver.VICTORY; diff --git a/lib/utils/random_pick.dart b/lib/utils/random_pick.dart index a19affea317235b7bdea1e6dc29c6bf62cdf83f0..ff903b1be2fa94769ff63743f46be3f958de4044 100644 --- a/lib/utils/random_pick.dart +++ b/lib/utils/random_pick.dart @@ -13,9 +13,9 @@ class RandomPick { final String level; RandomPick(this.level); - String _url; - String _word; - String _clue; + String _url = ''; + String _word = ''; + String _clue = ''; final random = Random(); init() async { @@ -48,7 +48,7 @@ class RandomPick { var html = parse(utf8.decode(response.bodyBytes)); Element element = html.getElementsByTagName('div').last; String word = _validate(element.text); - if (word == null) { + if (word == '') { throw Exception(); } _word = word; @@ -56,21 +56,21 @@ class RandomPick { throw Exception(); } } catch (e) { - _word = null; + _word = ''; } } String _validate(String word) { String wordToValidate = word.trim(); if (wordToValidate.contains(' ')) { - return null; + return ''; } 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; + return ''; } return wordToValidate; } @@ -101,7 +101,11 @@ class RandomPick { words.add(word); } String word = words[random.nextInt(words.length)]; - _word = word ?? 'UNEXPECTED ERROR'; + if (word != '') { + _word = word; + } else { + _word = 'UNEXPECTED ERROR'; + } } catch (e) { _word = 'UNEXPECTED ERROR'; } diff --git a/lib/utils/shared_prefs.dart b/lib/utils/shared_prefs.dart index f3352af2bfff67580b89f2cfeb3aedd772c19eb0..cde8a6e980d030d9d55ff69808a3bf2c5b348bab 100644 --- a/lib/utils/shared_prefs.dart +++ b/lib/utils/shared_prefs.dart @@ -1,7 +1,7 @@ import 'package:shared_preferences/shared_preferences.dart'; class SharedPrefs { - static SharedPreferences _sharedPrefs; + static SharedPreferences? _sharedPrefs; static const String _prefsGameMode = 'gameMode'; static const String _prefsLevel = 'level'; static const String _prefsVictoryCount = 'victoryCount'; @@ -13,19 +13,19 @@ class SharedPrefs { } } - bool get gameMode => _sharedPrefs?.getBool(_prefsGameMode); + bool get gameMode => _sharedPrefs?.getBool(_prefsGameMode) ?? false; - set gameMode(bool value) => _sharedPrefs.setBool(_prefsGameMode, value); + set gameMode(bool value) => _sharedPrefs?.setBool(_prefsGameMode, value); - String get level => _sharedPrefs?.getString(_prefsLevel); + String get level => _sharedPrefs?.getString(_prefsLevel) ?? ''; - set level(String value) => _sharedPrefs.setString(_prefsLevel, value); + set level(String value) => _sharedPrefs?.setString(_prefsLevel, value); - int get victoryCount => _sharedPrefs?.getInt(_prefsVictoryCount); + int get victoryCount => _sharedPrefs?.getInt(_prefsVictoryCount) ?? 0; set victoryCount(int value) => _sharedPrefs?.setInt(_prefsVictoryCount, value); - int get defeatCount => _sharedPrefs?.getInt(_prefsDefeatCount); + int get defeatCount => _sharedPrefs?.getInt(_prefsDefeatCount) ?? 0; set defeatCount(int value) => _sharedPrefs?.setInt(_prefsDefeatCount, value); } diff --git a/lib/widgets/dialog_fetch_error.dart b/lib/widgets/dialog_fetch_error.dart index c355b285f95eaa7300a631db1673fb5e620f3fbb..fc44528706273e4538a4b458f95756a682f92007 100644 --- a/lib/widgets/dialog_fetch_error.dart +++ b/lib/widgets/dialog_fetch_error.dart @@ -2,7 +2,7 @@ import 'package:hangman/utils/constants.dart'; import 'package:flutter/material.dart'; class DialogFetchError extends StatelessWidget { - const DialogFetchError({Key key}) : super(key: key); + const DialogFetchError({Key? key}) : super(key: key); @override Widget build(BuildContext context) { diff --git a/lib/widgets/letters.dart b/lib/widgets/letters.dart index d3f45db3112ff1edd891c20e9f900d6ab86e3712..e1de350c16c27390111d101511e8d17acf1ae024 100644 --- a/lib/widgets/letters.dart +++ b/lib/widgets/letters.dart @@ -5,7 +5,7 @@ import '../utils/constants.dart'; import '../widgets/dialog_gameover.dart'; class LetterButtons extends StatelessWidget { - const LetterButtons({Key key}) : super(key: key); + const LetterButtons({Key? key}) : super(key: key); @override Widget build(BuildContext context) { diff --git a/lib/widgets/my_app_bar.dart b/lib/widgets/my_app_bar.dart index 74080942ea54381cd5491e0743f149d80ad3638c..4737a1bb6eb3108a3c968eb1862b1811ef7d6987 100644 --- a/lib/widgets/my_app_bar.dart +++ b/lib/widgets/my_app_bar.dart @@ -4,11 +4,11 @@ import 'package:flutter/services.dart' show SystemNavigator; import '../screens/scores.dart'; class MyAppBar extends StatelessWidget implements PreferredSizeWidget { - final AppBar appBar; - const MyAppBar({Key key, this.appBar}) : super(key: key); + final AppBar? appBar; + const MyAppBar({Key? key, this.appBar}) : super(key: key); @override - Size get preferredSize => Size.fromHeight(appBar.preferredSize.height); + Size get preferredSize => Size.fromHeight(appBar?.preferredSize.height ?? 0.0); @override Widget build(BuildContext context) { diff --git a/pubspec.lock b/pubspec.lock index 560a4a787b47ff9b3f1c529efe61af84b332225b..b9eec1c00ff69c1bbded450e6f60bad86394cf92 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -49,7 +49,7 @@ packages: name: csslib url: "https://pub.dartlang.org" source: hosted - version: "0.16.2" + version: "0.17.2" diacritic: dependency: "direct main" description: @@ -99,21 +99,21 @@ packages: name: html url: "https://pub.dartlang.org" source: hosted - version: "0.14.0+4" + version: "0.15.0" http: dependency: "direct main" description: name: http url: "https://pub.dartlang.org" source: hosted - version: "0.12.2" + version: "0.13.4" http_parser: dependency: transitive description: name: http_parser url: "https://pub.dartlang.org" source: hosted - version: "3.1.4" + version: "4.0.1" js: dependency: transitive description: @@ -177,13 +177,6 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.1.0" - pedantic: - dependency: transitive - description: - name: pedantic - url: "https://pub.dartlang.org" - source: hosted - version: "1.11.1" platform: dependency: transitive description: @@ -211,7 +204,7 @@ packages: name: provider url: "https://pub.dartlang.org" source: hosted - version: "4.3.3" + version: "6.0.3" shared_preferences: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index 580c095fe8f7e4903bf36a5bcef81cf0bf61dd9a..83b66273e0ac790452c7bfc101c8523ecfff7dce 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -4,15 +4,15 @@ publish_to: 'none' version: 1.1.3+1 environment: - sdk: ">=2.7.0 <3.0.0" + sdk: ">=2.16.1 <3.0.0" dependencies: flutter: sdk: flutter - provider: ^4.3.2+3 + provider: ^6.0.2 shared_preferences: ^2.0.6 - html: ^0.14.0+4 - http: ^0.12.2 + html: ^0.15.0 + http: ^0.13.4 diacritic: ^0.1.1 dev_dependencies: