Merci pour ce retour et cette analyse!
Comme tu l’as remarqué il existe de multiples façons de gérer l’état dans une app Flutter.
En fonction des personnes, certains t’orienteront dans un sens, et d’autres prendront une autre direction.
Il faut surtout comprendre que dans tous les cas tu peux y arriver avec chacune de ces solutions, mais le principal problème sera le couplage et la modularité de tes classes
Le besoin
J’ai des infos dans un écran 1, et je veux récupérer ces infos dans un écran 2.
Mon analyse
Je considère les écrans et widgets comme des interfaces finales de nos apps. Ils servent à présenter des infos aux utilisateurs, ou à leur en demander. En aucun cas un écran ne devrait posséder des données de mon app.
Des couches logicielles internes sont là pour cela et les widgets ne sont que des intermédiaires qui vont présenter ces données d’une certaine façon.
Si un écran 2 veut les infos d’un écran 1, en réalité ces données ont déjà été transférées à la couche interne et c’est à elle de les fournir à l’écran 2.
Selon ma vision des choses, les écrans ne devraient JAMAIS communiquer entre eux.
Provider
La solution de type Provider crée un lien invisible entre les écrans (ou d’autres types d’objets) pour leur permettre de communiquer entre eux sans se connaître.
Je n’aime pas cette solution car elle est souvent utilisée pour faire communiquer un widget avec un autre.
Riverpod
Je ne l’ai jamais utilisé car je n’en ai jamais eu besoin puisque le Framework officiel fournit déjà tous les outils nécessaire. Je reviendrai plus tard sur ce point
setState
Ton analyse est bonne, il est utile pour gérer de la logique interne à un widget. Pour une app très basique où tu n’as pas de séparation UI/data alors ça va très bien. Mais dès que tu veux avoir plusieurs écrans et un minimum d’organisation tu seras limité.
Je me sers parfois de setState
dans de gros projets : pour des petits widgets avec un peu de logique interne. Ce sont généralement des widgets graphiques réutilisables.
AnimatedBuilder + ChangeNotifier
Ces 2 classes permettent à un Widget de surveiller un objet tiers, pour se redessiner si quelque chose change dans l’objet externe.
Je suppose que Riverpod doit permettre de faire la même chose d’ailleurs.
Mais l’objectif du cours était de permettre une véritable architecture organisées SANS utiliser de dépendance externe.
Concernant tes questions :
Oui ton analyse semble bonne, mais je connais très peu Provider et Riverpod
J’utilise la technique AnimatedBuilder
+ ChangeNotifier
sur des projets conséquents (app de Purple Giraffe, backoffice de gestion web de l’app Purple Giraffe, grosse app de billetterie qui va bientôt sortir, etc.) sans aucun problème.
Même une app complexe sera découpée en plusieurs écrans simples. Si tu as une architecture claire, tu auras des couches internes nombreuses et beaucoup de classes, mais à chaque écran tu pourras utiliser cette technique sans problème.
Si tu veux mon avis : inutile de partir sur Riverpod ni Provider 
Justement, le cours Flutter : Architecture et Navigation a été créé pour cette raison : il existe pleins de méthodes qui s’affrontent.
En voici une qui :
- fonctionne très bien
- scale très bien pour des apps complexes
- ne requiert aucune dépendance externe à Flutter
Note sur les dépendances externes
Autant que possible j’essaie toujours de limiter ces dépendances externes car :
- elles peuvent être abandonnées à tout moment par leur créateur
- elles peuvent être en retard par rapport au framework
- elles peuvent poser des problèmes de dépendances lors des mises à jour de Flutter
- elles intègrent du code externe dans mon app et je n’ai pas forcément le temps de vérifier tout leur code
- elles requièrent un temps de formation supplémentaire pour les apprendre
- elles requièrent du temps de formation supplémentaire à chacune de leurs mises à jour
- elles peuvent demander d’effectuer des migrations de code lors de breaking changes
J’utilise des lib externes, mais uniquement lorsque je n’ai pas le choix.
Résumé de ce long post 
Il existe des tas de systèmes de gestion d’état et ils sont tous valables. Pour plusieurs raisons, je préfère utiliser celui intégré à Flutter (AnimatedBuilder + ChangeNotifier) et je m’en sert avec plaisir sur des projets de toutes tailles.
C’est donc celui que je vous recommande et présente en détail dans le cours Flutter : Architecture et Navigation
Merci à toi pour ce retour et cette question intéressante 
Happy coding!