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

Merge branch '40-improve-ux-ui' into 'master'

Resolve "Improve UX/UI"

Closes #40

See merge request !41
parents 618c6179 97eee00b
No related branches found
No related tags found
1 merge request!41Resolve "Improve UX/UI"
Pipeline #5642 passed
org.gradle.jvmargs=-Xmx1536M org.gradle.jvmargs=-Xmx1536M
android.useAndroidX=true android.useAndroidX=true
android.enableJetifier=true android.enableJetifier=true
app.versionName=1.2.31 app.versionName=1.2.32
app.versionCode=37 app.versionCode=38
...@@ -7,7 +7,6 @@ ...@@ -7,7 +7,6 @@
"settings_title": "Settings", "settings_title": "Settings",
"settings_label_theme":"Theme mode", "settings_label_theme":"Theme mode",
"settings_label_timer_value":"Game turn allowed time",
"about_title": "Informations", "about_title": "Informations",
"about_content": "Categories", "about_content": "Categories",
......
...@@ -7,7 +7,6 @@ ...@@ -7,7 +7,6 @@
"settings_title": "Réglages", "settings_title": "Réglages",
"settings_label_theme":"Thème de couleurs", "settings_label_theme":"Thème de couleurs",
"settings_label_timer_value":"Durée du tour de jeu",
"about_title": "Informations", "about_title": "Informations",
"about_content": "Petit Bac.", "about_content": "Petit Bac.",
......
Improve UI, add emojis.
Améliorations graphiques, ajout d'émojis.
...@@ -19,10 +19,13 @@ class FetchDataHelper { ...@@ -19,10 +19,13 @@ class FetchDataHelper {
try { try {
final List<dynamic> rawCategories = GameData.data['categories'] as List<dynamic>; final List<dynamic> rawCategories = GameData.data['categories'] as List<dynamic>;
for (var rawElement in rawCategories) { for (var rawElement in rawCategories) {
final categoryCode = rawElement.toString(); final categoryCode = rawElement['code'].toString();
final categoryText = rawElement['text-fr'].toString();
final categoryEmoji = rawElement['emoji'].toString();
_categories.add(Category( _categories.add(Category(
key: categoryCode, key: categoryCode,
text: categoryCode, text: categoryText,
emoji: categoryEmoji,
)); ));
} }
} catch (e) { } catch (e) {
......
class GameData { class GameData {
static const Map<String, dynamic> data = { static const Map<String, dynamic> data = {
"categories": [ "categories": [
"Pays", {
"Prénom fille", "code": "Pays",
"Prénom garçon", "text-fr": "Pays",
"Animal", "emoji": "🗺️",
"Métier", },
"Villes", {
"Dessin animé", "code": "Prénom fille",
"Film", "text-fr": "Prénom fille",
"Auteur de littérature", "emoji": "👧🏼",
"Acteur ou actrice", },
"Chanteur ou chanteuse", {
"Chose ou objet", "code": "Prénom garçon",
"Fruit ou légume", "text-fr": "Prénom garçon",
"Couleur", "emoji": "👦🏼",
"Marque", },
"Moyen de transport", {
"Outil", "code": "Animal",
"Capitale", "text-fr": "Animal",
"Instrument de musique", "emoji": "🐒",
"Boisson", },
"Fleur", {
"Plat", "code": "Métier",
"Personnage historique", "text-fr": "Métier",
"Vêtement", "emoji": "👷",
"Minéral ou pierre précieuse", },
"Étoile, planète ou constellation", {
"Fleuve, cours d'eau ou océan", "code": "Villes",
"Partie du corps humain", "text-fr": "Villes",
"Oiseau", "emoji": "🏙️",
"Poisson", },
"Qualité ou défaut", {
"Arbre", "code": "Dessin animé",
"Bande dessinée", "text-fr": "Dessin animé",
"Département français", "emoji": "",
"Insecte", },
"Dessert", {
"Mammifère", "code": "Film",
"Épice", "text-fr": "Film",
"Héros de mythologie", "emoji": "🎥",
"Héros fictif", },
"Fromage", {
"Jeu", "code": "Auteur de littérature",
"Élément de véhicules", "text-fr": "Auteur de littérature",
"Site internet", "emoji": "🧑‍🏫",
"Mot de plus de 8 lettres", },
"Cadeau de Noël", {
"Mot en anglais", "code": "Acteur ou actrice",
"Mot en espagnol", "text-fr": "Acteur ou actrice",
"Métier dont rêvent les enfants", "emoji": "🎭",
"Chose qui se trouve dans une voiture", },
"Chose qui se trouve dans un camping", {
"Chose qui se trouve dans un cartable", "code": "Chanteur ou chanteuse",
"Chose qui se trouve dans une maison", "text-fr": "Chanteur ou chanteuse",
"Chose qui se trouve dans une forêt", "emoji": "🎤",
"Chose qui se trouve dans la mer", },
"Ville française", {
"Qui sent mauvais", "code": "Chose ou objet",
"Qui fait plaisir", "text-fr": "Chose ou objet",
"Mauvais pour la santé", "emoji": "📦",
"Mauvais pour l'environement", },
{
"code": "Fruit ou légume",
"text-fr": "Fruit ou légume",
"emoji": "🍅",
},
{
"code": "Couleur",
"text-fr": "Couleur",
"emoji": "🎨",
},
{
"code": "Marque",
"text-fr": "Marque",
"emoji": "™️",
},
{
"code": "Moyen de transport",
"text-fr": "Moyen de transport",
"emoji": "🚂",
},
{
"code": "Outil",
"text-fr": "Outil",
"emoji": "🛠️",
},
{
"code": "Capitale",
"text-fr": "Capitale",
"emoji": "",
},
{
"code": "Instrument de musique",
"text-fr": "Instrument de musique",
"emoji": "🎸",
},
{
"code": "Boisson",
"text-fr": "Boisson",
"emoji": "🥤",
},
{
"code": "Fleur",
"text-fr": "Fleur",
"emoji": "💐",
},
{
"code": "Plat",
"text-fr": "Plat",
"emoji": "🍲",
},
{
"code": "Personnage historique",
"text-fr": "Personnage historique",
"emoji": "🤴",
},
{
"code": "Vêtement",
"text-fr": "Vêtement",
"emoji": "👖",
},
{
"code": "Minéral ou pierre précieuse",
"text-fr": "Minéral ou pierre précieuse",
"emoji": "💎",
},
{
"code": "Étoile, planète ou constellation",
"text-fr": "Étoile, planète ou constellation",
"emoji": "🪐",
},
{
"code": "Fleuve, cours d'eau ou océan",
"text-fr": "Fleuve, cours d'eau ou océan",
"emoji": "🌊",
},
{
"code": "Partie du corps humain",
"text-fr": "Partie du corps humain",
"emoji": "🖐️",
},
{
"code": "Oiseau",
"text-fr": "Oiseau",
"emoji": "🐦",
},
{
"code": "Poisson",
"text-fr": "Poisson",
"emoji": "🐟",
},
{
"code": "Qualité ou défaut",
"text-fr": "Qualité ou défaut",
"emoji": "🙃",
},
{
"code": "Arbre",
"text-fr": "Arbre",
"emoji": "🌳",
},
{
"code": "Bande dessinée",
"text-fr": "Bande dessinée",
"emoji": "🗯️",
},
{
"code": "Département français",
"text-fr": "Département français",
"emoji": "",
},
{
"code": "Insecte",
"text-fr": "Insecte",
"emoji": "🐞",
},
{
"code": "Dessert",
"text-fr": "Dessert",
"emoji": "🍰",
},
{
"code": "Mammifère",
"text-fr": "Mammifère",
"emoji": "🐇",
},
{
"code": "Épice",
"text-fr": "Épice",
"emoji": "🌶️",
},
{
"code": "Héros de mythologie",
"text-fr": "Héros de mythologie",
"emoji": "🧙",
},
{
"code": "Héros fictif",
"text-fr": "Héros fictif",
"emoji": "🦸",
},
{
"code": "Fromage",
"text-fr": "Fromage",
"emoji": "🧀",
},
{
"code": "Jeu",
"text-fr": "Jeu",
"emoji": "🎲",
},
{
"code": "Élément de véhicules",
"text-fr": "Élément de véhicules",
"emoji": "🚗",
},
{
"code": "Site internet",
"text-fr": "Site internet",
"emoji": "💻",
},
{
"code": "Mot de plus de 8 lettres",
"text-fr": "Mot de plus de 8 lettres",
"emoji": "8️⃣",
},
{
"code": "Cadeau de Noël",
"text-fr": "Cadeau de Noël",
"emoji": "🎁",
},
{
"code": "Mot en anglais",
"text-fr": "Mot en anglais",
"emoji": "🇬🇧",
},
{
"code": "Mot en espagnol",
"text-fr": "Mot en espagnol",
"emoji": "🇪🇸",
},
{
"code": "Métier dont rêvent les enfants",
"text-fr": "Métier dont rêvent les enfants",
"emoji": "🧑‍⚕️",
},
{
"code": "Chose qui se trouve dans une voiture",
"text-fr": "Chose qui se trouve dans une voiture",
"emoji": "🚙",
},
{
"code": "Chose qui se trouve dans un camping",
"text-fr": "Chose qui se trouve dans un camping",
"emoji": "🏕️",
},
{
"code": "Chose qui se trouve dans un cartable",
"text-fr": "Chose qui se trouve dans un cartable",
"emoji": "🎒",
},
{
"code": "Chose qui se trouve dans une maison",
"text-fr": "Chose qui se trouve dans une maison",
"emoji": "🏠",
},
{
"code": "Chose qui se trouve dans une forêt",
"text-fr": "Chose qui se trouve dans une forêt",
"emoji": "🌲",
},
{
"code": "Chose qui se trouve dans la mer",
"text-fr": "Chose qui se trouve dans la mer",
"emoji": "🌊",
},
{
"code": "Ville française",
"text-fr": "Ville française",
"emoji": "",
},
{
"code": "Qui sent mauvais",
"text-fr": "Qui sent mauvais",
"emoji": "💩",
},
{
"code": "Qui fait plaisir",
"text-fr": "Qui fait plaisir",
"emoji": "🥰",
},
{
"code": "Mauvais pour la santé",
"text-fr": "Mauvais pour la santé",
"emoji": "☠️",
},
{
"code": "Mauvais pour l'environement",
"text-fr": "Mauvais pour l'environement",
"emoji": "🏭",
},
] ]
}; };
} }
class Category { class Category {
final String key; final String key;
final String text; final String text;
final String emoji;
const Category({ const Category({
required this.key, required this.key,
required this.text, required this.text,
required this.emoji,
}); });
@override @override
...@@ -16,6 +18,7 @@ class Category { ...@@ -16,6 +18,7 @@ class Category {
return { return {
'key': key, 'key': key,
'text': text, 'text': text,
'emoji': emoji,
}; };
} }
} }
...@@ -39,34 +39,37 @@ class GameButtonNextWithCountdown extends StatelessWidget { ...@@ -39,34 +39,37 @@ class GameButtonNextWithCountdown extends StatelessWidget {
width: borderWidth, width: borderWidth,
), ),
), ),
child: TextButton( child: SizedBox.square(
onPressed: () { dimension: 100,
final GameCubit gameCubit = BlocProvider.of<GameCubit>(context); child: TextButton(
onPressed: () {
final GameCubit gameCubit = BlocProvider.of<GameCubit>(context);
if (currentGame.isFinished) { if (currentGame.isFinished) {
gameCubit.quitGame(); gameCubit.quitGame();
} else {
if (currentGame.gameSettings.itemsCount == 0) {
gameCubit.pickNewItem();
gameCubit.startTimer();
} else { } else {
if (currentGame.countdown == 0) { if (currentGame.gameSettings.itemsCount == 0) {
gameCubit.next(); gameCubit.pickNewItem();
gameCubit.startTimer();
} else {
if (currentGame.countdown == 0) {
gameCubit.next();
}
} }
} }
} },
}, child: Text(
child: Text( currentGame.isFinished
currentGame.isFinished ? '🎆'
? '🎆' : ((currentGame.countdown == 0)
: ((currentGame.countdown == 0) ? '🎲'
? '🎲' : currentGame.countdown.toString()),
: currentGame.countdown.toString()), textAlign: TextAlign.center,
textAlign: TextAlign.center, style: const TextStyle(
style: const TextStyle( fontSize: 50,
fontSize: 50, fontWeight: FontWeight.w600,
fontWeight: FontWeight.w600, color: textColor,
color: textColor, ),
), ),
), ),
), ),
......
...@@ -34,7 +34,7 @@ class GamePositionIndicator extends StatelessWidget { ...@@ -34,7 +34,7 @@ class GamePositionIndicator extends StatelessWidget {
color: baseColor, color: baseColor,
backgroundColor: baseColor.darken(), backgroundColor: baseColor.darken(),
minHeight: barHeight, minHeight: barHeight,
borderRadius: const BorderRadius.all(Radius.circular(15)), borderRadius: const BorderRadius.all(Radius.circular(10)),
), ),
OutlinedText( OutlinedText(
text: '$currentPosition/$maxPosition', text: '$currentPosition/$maxPosition',
......
...@@ -20,6 +20,7 @@ class WidgetCategory extends StatelessWidget { ...@@ -20,6 +20,7 @@ class WidgetCategory extends StatelessWidget {
final Color borderColor = backgroundColor.darken(); final Color borderColor = backgroundColor.darken();
return Container( return Container(
width: double.maxFinite,
margin: const EdgeInsets.all(borderWidth), margin: const EdgeInsets.all(borderWidth),
padding: const EdgeInsets.all(borderWidth), padding: const EdgeInsets.all(borderWidth),
decoration: BoxDecoration( decoration: BoxDecoration(
...@@ -30,20 +31,37 @@ class WidgetCategory extends StatelessWidget { ...@@ -30,20 +31,37 @@ class WidgetCategory extends StatelessWidget {
width: borderWidth, width: borderWidth,
), ),
), ),
child: TextButton( child: Column(
onPressed: () { children: [
final GameCubit gameCubit = BlocProvider.of<GameCubit>(context); SizedBox(
gameCubit.pickNewCategory(); height: 100,
}, child: TextButton(
child: Text( onPressed: () {
currentGame.category.text, final GameCubit gameCubit = BlocProvider.of<GameCubit>(context);
textAlign: TextAlign.center, gameCubit.pickNewCategory();
style: const TextStyle( },
fontSize: 30, child: Text(
fontWeight: FontWeight.w600, currentGame.category.text,
color: Colors.black, textAlign: TextAlign.center,
style: const TextStyle(
fontSize: 30,
fontWeight: FontWeight.w600,
color: Colors.black,
),
),
),
), ),
), SizedBox.square(
dimension: 80,
child: Text(
currentGame.category.emoji,
textAlign: TextAlign.center,
style: const TextStyle(
fontSize: 50,
),
),
),
],
), ),
); );
}, },
......
...@@ -3,6 +3,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; ...@@ -3,6 +3,7 @@ import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:petitbac/cubit/game_cubit.dart'; import 'package:petitbac/cubit/game_cubit.dart';
import 'package:petitbac/models/game.dart'; import 'package:petitbac/models/game.dart';
import 'package:petitbac/ui/widgets/helpers/outlined_text_widget.dart';
import 'package:petitbac/utils/color_extensions.dart'; import 'package:petitbac/utils/color_extensions.dart';
class WidgetLetter extends StatelessWidget { class WidgetLetter extends StatelessWidget {
...@@ -20,6 +21,7 @@ class WidgetLetter extends StatelessWidget { ...@@ -20,6 +21,7 @@ class WidgetLetter extends StatelessWidget {
final Color borderColor = backgroundColor.darken(); final Color borderColor = backgroundColor.darken();
return Container( return Container(
width: double.maxFinite,
margin: const EdgeInsets.all(borderWidth), margin: const EdgeInsets.all(borderWidth),
padding: const EdgeInsets.all(borderWidth), padding: const EdgeInsets.all(borderWidth),
decoration: BoxDecoration( decoration: BoxDecoration(
...@@ -30,17 +32,18 @@ class WidgetLetter extends StatelessWidget { ...@@ -30,17 +32,18 @@ class WidgetLetter extends StatelessWidget {
width: borderWidth, width: borderWidth,
), ),
), ),
child: TextButton( child: SizedBox(
onPressed: () { height: 100,
final GameCubit gameCubit = BlocProvider.of<GameCubit>(context); child: TextButton(
gameCubit.pickNewLetter(); onPressed: () {
}, final GameCubit gameCubit = BlocProvider.of<GameCubit>(context);
child: Text( gameCubit.pickNewLetter();
currentGame.letter.text, },
style: const TextStyle( child: OutlinedText(
fontSize: 40, text: currentGame.letter.text,
fontWeight: FontWeight.w600, fontSize: 60,
color: Colors.black, textColor: Colors.black,
outlineColor: Colors.orange.darken(),
), ),
), ),
), ),
......
...@@ -3,7 +3,7 @@ description: A PetitBac game application. ...@@ -3,7 +3,7 @@ description: A PetitBac game application.
publish_to: "none" publish_to: "none"
version: 1.2.31+37 version: 1.2.32+38
environment: environment:
sdk: "^3.0.0" sdk: "^3.0.0"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment