Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • 17-improve-and-complete-offline-words-list-and-tips
  • 42-improve-app-metadata
  • 6-allow-translate-application
  • 9-improve-documentation
  • master
  • Release_1.1.10_10
  • Release_1.1.8_8
  • Release_1.1.9_9
  • Release_1.10.0_44
  • Release_1.10.1_45
  • Release_1.2.0_11
  • Release_1.2.10_21
  • Release_1.2.11_22
  • Release_1.2.12_23
  • Release_1.2.13_24
  • Release_1.2.14_25
  • Release_1.2.15_26
  • Release_1.2.16_27
  • Release_1.2.17_28
  • Release_1.2.18_29
  • Release_1.2.1_12
  • Release_1.2.2_13
  • Release_1.2.3_14
  • Release_1.2.4_15
  • Release_1.2.5_16
  • Release_1.2.6_17
  • Release_1.2.7_18
  • Release_1.2.8_19
  • Release_1.2.9_20
  • Release_1.3.0_30
  • Release_1.3.1_31
  • Release_1.3.2_32
  • Release_1.4.0_33
  • Release_1.4.1_34
  • Release_1.5.0_35
  • Release_1.5.1_36
  • Release_1.5.2_37
  • Release_1.6.0_38
  • Release_1.7.0_39
  • Release_1.8.0_40
  • Release_1.9.0_41
  • Release_1.9.1_42
  • Release_1.9.2_43
43 results

Target

Select target project
  • android/hangman
1 result
Select Git revision
  • 17-improve-and-complete-offline-words-list-and-tips
  • 42-improve-app-metadata
  • 6-allow-translate-application
  • 9-improve-documentation
  • master
  • Release_1.1.10_10
  • Release_1.1.8_8
  • Release_1.1.9_9
  • Release_1.10.0_44
  • Release_1.10.1_45
  • Release_1.2.0_11
  • Release_1.2.10_21
  • Release_1.2.11_22
  • Release_1.2.12_23
  • Release_1.2.13_24
  • Release_1.2.14_25
  • Release_1.2.15_26
  • Release_1.2.16_27
  • Release_1.2.17_28
  • Release_1.2.18_29
  • Release_1.2.1_12
  • Release_1.2.2_13
  • Release_1.2.3_14
  • Release_1.2.4_15
  • Release_1.2.5_16
  • Release_1.2.6_17
  • Release_1.2.7_18
  • Release_1.2.8_19
  • Release_1.2.9_20
  • Release_1.3.0_30
  • Release_1.3.1_31
  • Release_1.3.2_32
  • Release_1.4.0_33
  • Release_1.4.1_34
  • Release_1.5.0_35
  • Release_1.5.1_36
  • Release_1.5.2_37
  • Release_1.6.0_38
  • Release_1.7.0_39
  • Release_1.8.0_40
  • Release_1.9.0_41
  • Release_1.9.1_42
  • Release_1.9.2_43
43 results
Show changes

Commits on Source 6

......@@ -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')
......@@ -39,16 +39,12 @@ if (keystorePropertiesFile.exists()) {
}
android {
compileSdkVersion 29
lintOptions {
disable 'InvalidPackage'
}
compileSdkVersion 31
defaultConfig {
applicationId "org.benoitharrault.hangman"
minSdkVersion 21
targetSdkVersion 29
minSdkVersion 16
targetSdkVersion 30
versionCode appVersionCode.toInteger()
versionName appVersionName
archivesBaseName = "$applicationId" + "_" + "$versionCode"
......
......@@ -2,5 +2,5 @@ org.gradle.jvmargs=-Xmx1536M
android.useAndroidX=true
android.enableJetifier=true
android.enableR8=true
app.versionName=1.2.2
app.versionCode=13
app.versionName=1.2.5
app.versionCode=16
......@@ -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 = [];
......
......@@ -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();
......@@ -49,7 +49,7 @@ class Game extends StatelessWidget {
title: Text('Indice'),
content: Text(_myProvider.clue),
actions: <Widget>[
FlatButton(
TextButton(
child: Text('Revenir au jeu'),
onPressed: () => Navigator.of(context).pop(),
)
......@@ -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(
......
......@@ -12,7 +12,6 @@ class Home extends StatelessWidget {
@override
Widget build(BuildContext context) {
Orientation orientation = MediaQuery.of(context).orientation;
Data _myProvider = Provider.of<Data>(context);
void _errorWord(context) {
......@@ -23,7 +22,7 @@ class Home extends StatelessWidget {
content: Text('Erreur inattendue à la récupération d\'un mot aléatoire.\n'
'Installer une nouvelle version de l\'application pourrait corriger cette anomalie.'),
actions: <Widget>[
FlatButton(
TextButton(
child: Text('Fermer'),
onPressed: () => Navigator.of(context).pop(),
)
......@@ -64,7 +63,6 @@ class Home extends StatelessWidget {
),
),
),
Column(
children: [
Row(
......@@ -73,7 +71,8 @@ class Home extends StatelessWidget {
Text('Mode en ligne'),
Switch(
value: _myProvider.gameModeValue,
onChanged: (bool value) => _myProvider.updateGameMode = value,
onChanged: (bool value) =>
_myProvider.updateGameMode = value,
activeTrackColor: Color(board),
activeColor: Colors.greenAccent[400],
),
......@@ -84,37 +83,36 @@ 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 ?? '',
),
],
),
],
),
RaisedButton.icon(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.all(Radius.circular(10.0))),
color: Color(board),
textColor: Colors.white,
ElevatedButton.icon(
style: ElevatedButton.styleFrom(
onPrimary: Colors.white,
primary: Color(board),
padding: EdgeInsets.all(10.0),
),
onPressed: () async {
Scaffold.of(context).removeCurrentSnackBar();
_myProvider.resetGame();
_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,
......
......@@ -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;
......
......@@ -6,15 +6,16 @@ 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';
import '../words/list_french_words.dart';
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 {
......@@ -23,11 +24,13 @@ class RandomPick {
await wordFromLocal();
break;
case 'Avancé':
_url = 'https://www.palabrasaleatorias.com/mots-aleatoires.php?fs=1&fs2=0&Submit=Nouveau+mot';
_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';
_url =
'https://www.palabrasaleatorias.com/mots-aleatoires.php?fs=1&fs2=1&Submit=Nouveau+mot';
await wordFromWeb(_url);
break;
case 'Expert':
......@@ -45,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;
......@@ -53,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;
}
......@@ -98,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';
}
......
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);
}
......@@ -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) {
......@@ -16,11 +16,11 @@ class DialogFetchError extends StatelessWidget {
'La connexion internet est peut-être inaccessible.\n'
'Changer vers un mode de jeu hors-ligne ?'),
actions: [
FlatButton(
TextButton(
child: const Text('REVENIR'),
onPressed: () => Navigator.pop(context, false),
),
FlatButton(
TextButton(
child: const Text('ACCEPTER'),
onPressed: () => Navigator.pop(context, true),
),
......
......@@ -38,13 +38,13 @@ class DialogGameOver extends StatelessWidget {
),
),
actions: [
FlatButton(
TextButton(
child: const Text('QUITTER'),
onPressed: () {
Navigator.pushNamed(context, Home.id);
},
),
FlatButton(
TextButton(
child: const Text('REJOUER'),
onPressed: () async {
_myProvider.resetSuccessAndErrors();
......
......@@ -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) {
......@@ -23,10 +23,12 @@ class LetterButtons extends StatelessWidget {
keys.add(
Padding(
padding: const EdgeInsets.all(2.0),
child: RaisedButton(
disabledColor: Colors.grey,
disabledTextColor: Colors.white,
splashColor: Color(accent),
child: ElevatedButton(
style: ElevatedButton.styleFrom(
primary: Colors.grey,
onPrimary: Colors.white,
shadowColor: Color(accent),
),
onPressed: _myProvider.usedLetters.contains(key)
? null
: () async {
......@@ -61,13 +63,13 @@ class LetterButtons extends StatelessWidget {
key,
textAlign: TextAlign.center,
),
color: Colors.grey[200],
),
),
);
});
return Container(
alignment: orientation == Orientation.portrait ? Alignment.bottomCenter : Alignment.center,
alignment:
orientation == Orientation.portrait ? Alignment.bottomCenter : Alignment.center,
color: Color(darkGreen),
padding: EdgeInsets.all(10.0),
margin: EdgeInsets.only(top: orientation == Orientation.portrait ? 0.0 : paddingTop),
......@@ -75,7 +77,8 @@ class LetterButtons extends StatelessWidget {
padding: EdgeInsets.zero,
shrinkWrap: true,
crossAxisCount: orientation == Orientation.portrait ? 9 : 3,
childAspectRatio: orientation == Orientation.portrait ? 1 / 1 : (itemWidth / itemHeight),
childAspectRatio:
orientation == Orientation.portrait ? 1 / 1 : (itemWidth / itemHeight),
children: keys,
),
);
......
import 'package:flutter/material.dart';
import 'package:flutter/services.dart' show SystemNavigator;
import 'package:provider/provider.dart';
import '../provider/data.dart';
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) {
Data _myProvider = Provider.of<Data>(context);
return AppBar(
title: Text('Hangman'),
automaticallyImplyLeading: false,
......@@ -27,7 +23,6 @@ class MyAppBar extends StatelessWidget implements PreferredSizeWidget {
SystemNavigator.pop();
break;
case 'Scores':
Scaffold.of(context).removeCurrentSnackBar();
Navigator.pushNamed(context, Scores.id);
break;
}
......
This diff is collapsed.
......@@ -21,7 +21,7 @@ packages:
name: characters
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0"
version: "1.2.0"
charcode:
dependency: transitive
description:
......@@ -42,14 +42,14 @@ packages:
name: collection
url: "https://pub.dartlang.org"
source: hosted
version: "1.15.0"
version: "1.16.0"
csslib:
dependency: transitive
description:
name: csslib
url: "https://pub.dartlang.org"
source: hosted
version: "0.16.2"
version: "0.17.2"
diacritic:
dependency: "direct main"
description:
......@@ -63,21 +63,21 @@ packages:
name: fake_async
url: "https://pub.dartlang.org"
source: hosted
version: "1.2.0"
version: "1.3.0"
ffi:
dependency: transitive
description:
name: ffi
url: "https://pub.dartlang.org"
source: hosted
version: "1.1.0"
version: "2.0.1"
file:
dependency: transitive
description:
name: file
url: "https://pub.dartlang.org"
source: hosted
version: "6.1.1"
version: "6.1.2"
flutter:
dependency: "direct main"
description: flutter
......@@ -99,35 +99,28 @@ 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:
name: js
url: "https://pub.dartlang.org"
source: hosted
version: "0.6.3"
list_french_words:
dependency: "direct main"
description:
name: list_french_words
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.0+1"
version: "0.6.4"
matcher:
dependency: transitive
description:
......@@ -135,6 +128,13 @@ packages:
url: "https://pub.dartlang.org"
source: hosted
version: "0.12.11"
material_color_utilities:
dependency: transitive
description:
name: material_color_utilities
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.4"
meta:
dependency: transitive
description:
......@@ -155,105 +155,112 @@ packages:
name: path
url: "https://pub.dartlang.org"
source: hosted
version: "1.8.0"
version: "1.8.1"
path_provider_linux:
dependency: transitive
description:
name: path_provider_linux
url: "https://pub.dartlang.org"
source: hosted
version: "0.0.1+2"
version: "2.1.7"
path_provider_platform_interface:
dependency: transitive
description:
name: path_provider_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.4"
version: "2.0.4"
path_provider_windows:
dependency: transitive
description:
name: path_provider_windows
url: "https://pub.dartlang.org"
source: hosted
version: "0.0.5"
pedantic:
dependency: transitive
description:
name: pedantic
url: "https://pub.dartlang.org"
source: hosted
version: "1.11.0"
version: "2.1.0"
platform:
dependency: transitive
description:
name: platform
url: "https://pub.dartlang.org"
source: hosted
version: "3.0.0"
version: "3.1.0"
plugin_platform_interface:
dependency: transitive
description:
name: plugin_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.3"
version: "2.1.2"
process:
dependency: transitive
description:
name: process
url: "https://pub.dartlang.org"
source: hosted
version: "4.2.1"
version: "4.2.4"
provider:
dependency: "direct main"
description:
name: provider
url: "https://pub.dartlang.org"
source: hosted
version: "4.3.3"
version: "6.0.3"
shared_preferences:
dependency: "direct main"
description:
name: shared_preferences
url: "https://pub.dartlang.org"
source: hosted
version: "0.5.12+4"
version: "2.0.15"
shared_preferences_android:
dependency: transitive
description:
name: shared_preferences_android
url: "https://pub.dartlang.org"
source: hosted
version: "2.0.12"
shared_preferences_ios:
dependency: transitive
description:
name: shared_preferences_ios
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.1"
shared_preferences_linux:
dependency: transitive
description:
name: shared_preferences_linux
url: "https://pub.dartlang.org"
source: hosted
version: "0.0.2+4"
version: "2.1.1"
shared_preferences_macos:
dependency: transitive
description:
name: shared_preferences_macos
url: "https://pub.dartlang.org"
source: hosted
version: "0.0.1+11"
version: "2.0.4"
shared_preferences_platform_interface:
dependency: transitive
description:
name: shared_preferences_platform_interface
url: "https://pub.dartlang.org"
source: hosted
version: "1.0.4"
version: "2.0.0"
shared_preferences_web:
dependency: transitive
description:
name: shared_preferences_web
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.2+7"
version: "2.0.4"
shared_preferences_windows:
dependency: transitive
description:
name: shared_preferences_windows
url: "https://pub.dartlang.org"
source: hosted
version: "0.0.2+3"
version: "2.1.1"
sky_engine:
dependency: transitive
description: flutter
......@@ -265,7 +272,7 @@ packages:
name: source_span
url: "https://pub.dartlang.org"
source: hosted
version: "1.8.1"
version: "1.8.2"
stack_trace:
dependency: transitive
description:
......@@ -300,35 +307,35 @@ packages:
name: test_api
url: "https://pub.dartlang.org"
source: hosted
version: "0.4.3"
version: "0.4.9"
typed_data:
dependency: transitive
description:
name: typed_data
url: "https://pub.dartlang.org"
source: hosted
version: "1.3.0"
version: "1.3.1"
vector_math:
dependency: transitive
description:
name: vector_math
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.0"
version: "2.1.2"
win32:
dependency: transitive
description:
name: win32
url: "https://pub.dartlang.org"
source: hosted
version: "2.1.1"
version: "2.7.0"
xdg_directories:
dependency: transitive
description:
name: xdg_directories
url: "https://pub.dartlang.org"
source: hosted
version: "0.1.2"
version: "0.2.0+1"
sdks:
dart: ">=2.13.0 <3.0.0"
flutter: ">=1.20.0"
dart: ">=2.17.0 <3.0.0"
flutter: ">=3.0.0"
name: hangman
description: Hangman game, have fun with words and letters!
publish_to: 'none' # Remove this line if you wish to publish to pub.dev
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
shared_preferences: ^0.5.12+4
html: ^0.14.0+4
http: ^0.12.2
provider: ^6.0.2
shared_preferences: ^2.0.6
html: ^0.15.0
http: ^0.13.4
diacritic: ^0.1.1
list_french_words: ^0.1.0
dev_dependencies:
flutter_test:
......
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:hangman/main.dart';
void main() {
testWidgets('Counter increments smoke test', (WidgetTester tester) async {
await tester.pumpWidget(Hangman());
});
}