Flattern. So aktualisieren Sie Ihren BLoC

Es gibt viele Bibliotheken, die das BLoC-Muster implementieren. Aber der, über den ich sprechen werde, ist ungewöhnlich und heißt isolate_bloc.



Wie der Name schon sagt, handelt es sich um eine Art ungewöhnlichen Block, und seine Besonderheit besteht darin, dass er in einem separaten Isolat (im Folgenden "Isolat") arbeitet und Ihre Benutzeroberfläche nicht verlangsamt.



Was ist das Problem mit einem regulären Block?



Neben dem Boilerplate gibt es noch ein weiteres Problem: Es funktioniert im Hauptthread, sodass schwere Aufgaben wie das Parsen von JSON zu einem Einfrieren der Benutzeroberfläche führen können.



Bibliotheken wie simple_bloc oder cubit können beim ersten Problem helfen. Aus dem zweiten - isolieren oder einen Wrapper darüber - berechnen. Im Prinzip ist dies eine wirklich gute Kombination, die viele Menschen verwenden, aber selbst sie löst nicht alle Probleme. Beispielsweise können Sie nicht isoliert mit MethodChannel arbeiten, und seine Verwendung ist im Prinzip mit Unannehmlichkeiten und einer Kesselplatte verbunden.



Block isolieren







Diese Bibliothek hilft bei der Verwendung des BLoC-Musters und löst eine Reihe von Aufgaben, z. B. das Arbeiten mit Isolaten und MessageChannels. Darüber hinaus können Sie die Codemenge beim Schreiben des Blocks selbst reduzieren.



Wie benutzt man es?



Schauen wir uns ein einfaches Beispiel an, um zu verstehen, wie man mit dieser Bibliothek arbeitet.



Trotz der Tatsache, dass ich weiter versucht habe, alles im Detail zu beschreiben, kann etwas unverständlich bleiben, so dass davon ausgegangen wird, dass Sie bereits mit dem BLoC-Muster vertraut sind.



Jedes Flatterprojekt beginnt mit einem Zähler, also fangen wir auch damit an. Der erste Schritt besteht darin, den Block selbst zu schreiben.







In Zeile 3 erstellen wir eine CounterBloc-Klasse, die von der IsolateBloc-Klasse erbt. Hier geben wir die Art der Ereignisse und Zustände unseres Blocks an.



In Zeile 4 übergeben wir den Anfangszustand des Zählers - 0.



In den Zeilen 6 bis 9 überschreiben wir die Methode onEventReceived, die aufgerufen wird, wenn ein neues Ereignis empfangen wird. State ist ein Getter, der den letzten Status zurückgibt, den der Block an die Benutzeroberfläche gesendet hat.



In Zeile 8 verwenden wir die Emit-Funktion, die den Status annimmt und an die Benutzeroberfläche sendet.



Jetzt müssen Sie den Block registrieren.



Da es in einem separaten Isolat funktioniert, können wir es nicht direkt erstellen. Daher müssen Sie die Bibliothek mithilfe der Registerfunktion über ihre Existenz informieren.







In Zeile 5 initialisieren wir die Bibliothek und übergeben eine Funktion, die in Isolations- und Registerblöcken ausgeführt wird.



In Zeile 10 registrieren wir CounterBloc - jetzt kann die Bibliothek es auf unsere Anfrage erstellen.



Es bleibt nur die Benutzeroberfläche zu beschreiben!







In Zeile 8 erstellen wir einen Block und fügen ihn dem Widget-Baum hinzu.



In Zeile 23 hören wir uns den Zustand des Blocks an. IsolateBlocBuilder funktioniert wie StreamBuilder, kann den Block jedoch im Widget-Baum selbst finden.



In den Zeilen 31 bis 33 verwenden wir die Erweiterungsmethode isolateBloc <Bloc, State> (), um einen Block aus dem Kontext abzurufen, und verwenden die Funktion add (), um ihm ein neues Ereignis hinzuzufügen.



Das ist alles, jetzt können Sie anfangen!



Das endgültige



Anhand eines einfachen Beispiels habe ich gezeigt, wie man mit dieser Bibliothek arbeitet, und für weitere Studien empfehle ich Ihnen, sich die Seite auf dem Github anzusehen . Dort werden alle Funktionen beschrieben und es gibt komplexere Beispiele.



All Articles