refacto: Decouple the responsibilities of Providers
Le choix de la méthode dont est géré le State est au centre de l’architecture de l’application. Cependant le State Management a un rôle bien précis : gérer l’état de l’application à travers plusieurs écrans. Il doit au maximum garder cette unique mission pour en garantir sa maintenabilité, sa lecture et sa responsabilité unique. On remarque ici que d’un provider à un autre, sa mission n’est pas la même.
Exemple de situation :
wallets_profiles.dart
Future<String> scan(context) async {
// accès à la camera
// navigation
}
bool isAddress(address) {
// test de correspondance du paramètre en fonction d'une regExp
}
Widget headerProfileView(BuildContext context, String address, String? username) {
// retour d'un arbre de widgets
}
Future addContact(G1WalletsList profile) async {
// interaction avec la base de données locale
}
snackCopyKey(context) {
// affichage d'une SnackBar
}
Nous remarquons que ce Provider a plusieurs responsabilités comme demander l’accès à l’appareil photo du téléphone, construire un arbre de widget, interagir avec la base de données embarquée ... Cela pose un problème sur les limites du rôle que porte ce Provider.
Actions à mettre en place et recommandations :
- repenser le rôle des Providers
- opter pour une architecture bien définie
- externaliser certaines responsabilités dans des packages distincts comme la partie dialogue avec la base de données locales, la navigation, ou encore les appels réseau ...