7 - Recipeasy


Pour s'assurer de la maîtrise des concepts fondamentaux du développement d'applications Android, vous développerez une preuve de concept qui vous servira de référence pour le reste de la session.

  • Vous devrez créer un répertoire sur Bitbucket et me le partager via l'adresse jhoffman@cshawi.ca
    • Vous utiliserez également une branche distincte identifiant chacune des remises itérative

Interface utilisateur

Créer les écrans suivants en respectant la structure de projet vue en classe.

  • Les images ci-dessous représentent une maquette, donc vous pouvez utiliser des couleurs différentes ou une librairie de composants différente sans changer la mise en forme
  • Exploitez judicieusement la séparation en components et l'organisation des fichiers
Login
Signup
Recipe


Librairies suggérées

Boutons radio 📚 RN Radio Buttons Group
npx expo install react-native-radio-buttons-group
import { View } from 'react-native';

import RadioGroup from 'react-native-radio-buttons-group';

export default function App() {
      
    const options = [
        {
            id: '1',
            label: 'One',
            value: '1'
        },
        {
            id: '2',
            label: 'Two',
            value: '2'
        }
    ];

    return (
        <View>

            <RadioGroup radioButtons={ options } />

        </View>
   );
}
Liste déroulante 📚 Expo Picker
npx expo install @react-native-picker/picker
import { View } from 'react-native';
import { Picker } from '@react-native-picker/picker';

export default function App() {
      
    return (
        <View>

            <Picker >
                <Picker.Item label="One" value="1" />
                <Picker.Item label="Two" value="2" />
            </Picker>

        </View>
   );

}

Interactions

À partir des écrans créé précédemment, ajouter la navigation en respectant le storyboard ci-dessous.

  • Assurez-vous de respecter votre thème de couleur

Liste des recettes

Pour nous permettre de continuer le développement, nous créons un écran provisoire pour afficher la liste des recettes. À court-terme, cet écran est responsable de stocker la liste des recettes et d'offrir des interactions de base.

  • Bouton View ouvre le détail d'une recette aléatoire de la liste
  • Bouton Add ouvre le détail en mode ajout
  • Un texte affiche le tableau de recettes brutes en string, JSON.stringify(...)
  • On ajoute un bouton Log out dans la barre de navigation qui retourne au login
  • L'option back de la barre de navigation est désactivée

Détail d'une recette

Permet d'ajouter une nouvelle recette ou de consulter une recette existante reçue en paramètre de navigation.

  • Pour la création, les données doivent être valides
    • Catégorie requise
    • Nom requis, non vide
    • Durée > 0
  • Le bouton Delete est disponible en consultation uniquement et retourne simplement à la liste. PAS de suppression à implémenter
  • Le bouton Save est disponible en ajout uniquement et retourne la nouvelle recette à la liste via la navigation
    • La liste se mets à jour

Structure d'une recette

{
    category: Int,
    name: String,
    durationHours: Int,
    durationMinutes: Int,
    description: String
}

Liste

Ajouter l'affichage des recettes en utilisant un mécanisme de liste optimal en considérant les aspects suivants:

  • Liste triée par nom, ascendant
    • Affichage d'un message si la liste est vide
    • Affichage d'un séparateur
  • Chaque item de la liste affiche
    • une icône pour la catégorie
    • la durée formatée en heures-minutes XhY
    • le nom
    • la description
  • Item cliquable, avec une rétroaction visuelle, qui amène au détail correspondant
  • Mise à jour de la liste lors d'un ajout

Penser également à créer manuellement des recettes de départ, seeds, pour tester votre affichage.

Liste vide
Liste
Clic

HTTP

Implémenter les fonctionnalités d'authentification et CRUDL des recettes via l'API HTTP Martha à partir des fichiers fournis précédemment.

  • Mettre à jour l'écran Recipe pour afficher un bouton Save en édition
  • Exploiter judicieusement les services et les models pour traiter les données
  • Ajouter la gestion d'erreurs dans la communication HTTP

Critères d’évaluation

10% / 38

Nom: ____________________________________

Interface utilisateur 11 sept. 8h30
Login 0 0.5 1
Signup 0 0.5 1
Recipe 0 0.5 1
Structure du projet, Partage via Bitbucket 0 0.5 1
Interactivité 25 sept. 8h30
Navigation Login/Sign Up 0 0.5 1
Navigation Log Out, back bloqué 0 0.5 1
Navigation Liste/Ajout/Consultation 0 0.5 1
UI/UX cohérent 0 0.5 1
Liste brute des recettes, mise à jour 0 0.5 1
Ouverture du détail d'une recette aléatoire, données cohérentes 0 0.5 1
Interactions en ajout, validations 0 0.5 1
Mise à jour du code sur Bitbucket, commits fréquents 0 0.5 1
Liste 2 oct. 8h30
Mécanisme optimal 0 0.5 1
Liste vide 0 0.5 1
Item: icône, durée formatée, nom, description 0 1 1.5 2
Séparateur 0 0.5 1
Item clic, rétroaction, navigue vers le détail correspondant 0 1 1.5 2
Ajout, mise à jour de la liste, trié par nom ascendant 0 1 1.5 2
Seeds pertinents 0 0.5 1
UI/UX cohérent 0 1 1.5 2
Mise à jour du code sur Bitbucket, commits fréquents 0 0.5 1
Régression 0 -0.5 -1
HTTP 16 oct. 8h30
(Authentification via Martha) 0 -0.5 -1
C R U D L des recettes via Martha 0 2 3 4 4.5 5
Gestion des erreurs 0 1 1.5 2
Implémentation judicieuse des services et models 0 2 3 4 4.5 5
UI/UX cohérent 0 0.5 1
Mise à jour du code sur Bitbucket, commits fréquents 0 -0.5 -1
Refactoring 3 novembre 15h00 0 +50%