Battement. Comment mettre à niveau votre BLoC

Il existe de nombreuses bibliothèques qui implémentent le modèle BLoC. Mais celui dont je vais parler est inhabituel et s'appelle isolate_bloc.



Comme son nom l'indique, il s'agit d'une sorte de bloc inhabituel, et sa particularité est qu'il fonctionne dans un isolat séparé (ci-après isolat) et ne ralentit pas votre interface utilisateur.



Quel est le problème avec un bloc régulier?



En plus du passe-partout, il y a un autre problème: cela fonctionne dans le thread principal, de sorte que des tâches lourdes telles que l'analyse de json peuvent entraîner des blocages dans l'interface utilisateur.



Les bibliothèques comme simple_bloc ou cubit peuvent aider avec le premier problème. À partir de la seconde - isoler, ou un wrapper dessus - Calculez. En principe, c'est une très bonne combinaison que de nombreuses personnes utilisent, mais même elle ne résout pas tous les problèmes. Par exemple, il est impossible de travailler avec MethodChannel en isolat, et en principe son utilisation est associée à des inconvénients et à une plaque chauffante.



Isoler le bloc







Cette bibliothèque permet d'utiliser le modèle BLoC et résout un certain nombre de tâches, telles que l'utilisation d'isolats et de MessageChannels. De plus, il vous permet de réduire la quantité de code lors de l'écriture du bloc lui-même.



Comment l'utiliser?



Pour comprendre comment travailler avec cette bibliothèque, regardons un exemple simple.



Malgré le fait que j'ai essayé de tout décrire en détail, quelque chose peut rester incompréhensible, on suppose donc que vous êtes déjà familier avec le modèle BLoC.



Tout projet de flutter commence par un compteur, nous allons donc commencer par cela aussi. La première étape consiste à écrire le bloc lui-même.







À la ligne 3, nous créons une classe CounterBloc qui hérite de la classe IsolateBloc. Ici, nous indiquons le type d'événements et les états de notre bloc.



Sur la ligne 4, nous passons l'état initial du compteur - 0.



Des lignes 6 à 9, nous remplaçons la méthode onEventReceived, qui est appelée lorsqu'un nouvel événement est reçu. State est un getter qui renvoie le dernier état envoyé par le bloc à l'interface utilisateur.



À la ligne 8, nous utilisons la fonction d'émission, qui prend l'état et l'envoie à l'interface utilisateur.



Vous devez maintenant enregistrer le bloc.



Comme cela fonctionne dans un isolat séparé, nous ne pouvons pas le créer directement. Par conséquent, vous devez informer la bibliothèque de son existence à l'aide de la fonction de registre.







À la ligne 5, nous initialisons la bibliothèque et passons une fonction qui s'exécutera dans des blocs isoler et enregistrer.



Sur la ligne 10, nous enregistrons CounterBloc - maintenant la bibliothèque pourra le créer à notre demande.



Il ne reste plus qu'à décrire l'interface utilisateur!







À la ligne 8, nous créons un bloc et l'ajoutons à l'arborescence des widgets.



À la ligne 23, nous écoutons l'état du bloc. IsolateBlocBuilder fonctionne comme StreamBuilder, mais il peut trouver le bloc dans l'arborescence des widgets elle-même.



Des lignes 31 à 33, nous utilisons la méthode d'extension isolateBloc <Bloc, State> () pour extraire le bloc du contexte et utiliser la fonction add () pour y ajouter un nouvel événement.



C'est tout, maintenant vous pouvez commencer!



Le final



En utilisant un exemple basique, j'ai montré comment travailler avec cette bibliothèque, et pour une étude plus approfondie, je vous conseille de regarder sa page sur le github . Toutes les fonctionnalités y sont décrites et il existe des exemples plus complexes.



All Articles