triviaflutter - M2 Flutter project

Anthony Quéré (Anthony-Jhoiro)

Informations utiles

  • Authentification effectuée avec Firebase avec une authentification par téléphone (pour voir à quoi ça ressemblait)
  • Certains tests unitaires ont été réalisés (on m'avait venté de leur simplicité, effectivement c'est très simple)
  • Upload de photo de profil avec FirebaseStorage (je pensais que c'était obligatoire) - (*peu stable en mode développement, due à flutter/flutter#103892)
  • Utilisation des streams pour mettre à jour l'utilisateur sur la page de profil quand il répond correctement à une question (L'approche des streams en dart est très intéressante et bien plus simple que ce que j'ai pu voir ailleurs)
# Install dependencies
flutter pub get

# Run tests
flutter test

# Format code
flutter format --fix .

# Analyze code with dart analyzer
flutter analyze .

Architecture

lib/
├── assets
├── common
│     ├── datasources
│     │     └── remote                     # Classes to access remote APIs for firebase and the trivia API
│     ├── models                           # domains and dtos used in the Applications
│     │     └── dto                        # All Dto code with the json API generated by Mason
│     └── repository                       # Classes to interface the datasources
├── core
│     └── tools                            # Utilities
├── main.dart
├── main_router.dart
└── ui
    ├── common                             # Generic components
    ├── pages
    │     ├── home
    │     │     ├── game
    │     │     │     ├── bloc             # Cubit for the game page
    │     │     │     ├── game_page.dart   # Main widget for the game page
    │     │     │     └── widgets          # Widgets for the main page
    │     │     ├── home_page.dart
    │     │     ├── profile
    │     │     │     ├── bloc
    │     │     │     ├── profile_page.dart
    │     │     │     └── widgets
    │     │     └── ranking
    │     │         ├── bloc
    │     │         ├── ranking_page.dart
    │     │         └── widgets
    │     └── signup
    │         ├── bloc
    │         ├── signup_page.dart
    │         └── widgets
    └── theme.dart                             # Generated material theme

Usefull commands

Generate model with mason

mason make model --model_name MODEL_NAME --additionals "[copyWith, json, equatable]" --style freezed

Les Cubits

Générer les fichiers de base :

mason make freezed_cubit

Ensuite dans le _state.dart ajouter les lignes pour les autres états (ça compile pas c'est normal 😱). Ensuite lancer

flutter pub run build_runner build

Et avec un peu de bol ça marche