\section{Redux}
\label{eval:redux}

Riverpod stellt eine externe Bibliothek zur Zustandsverwaltung dar, welche das Konzept von Provider erweitert und laut eigenen Angaben verbessert. Die Grundlagen dazu sind im \autoref{sec:redux} nachzuvollziehen.

\subsection{Implementierung}

Für die Implementierung mit Redux wurden die Bibliotheken redux in der Version 5.0.0 und flutter\_redux in der Version 0.8.2 genutzt.

Anstelle von mehreren Zuständen wurde hier ein zentraler Zustand implementiert, der auch als Store bezeichnet wird. Um Änderungen an diesem Store durchzuführen wurden diverse Actions definiert wie beispielsweise eine Action für den Anmeldevorgang. Diese Actions werden von Reducern verarbeitet, welche in diesem Fall immer einen Teilzustand des zentralen Zustands verändern.

Für den Abruf der Daten für die Produktliste wurde eine Middleware implementiert. Diese erhält von der Bibliothek alle Actions, bevor diese von einem Reducer bearbeitet werden. Die Middleware führt im Falle, dass eine entsprechende Action ausgelöst wird, die Netzwerkzugriffe durch und emittiert danach entsprechende Actions, welche durch Reducer die Daten in den Store übermitteln. Middlewares sind notwendig, da Reducer keine asynchronen Operationen durchführen sollen, da diese keine Nebeneffekte haben dürfen und bei gleicher Eingabe immer das gleiche Ergebnis liefern müssen. \autocite[vgl.][Kap1.3.3]{redux}

Für die Einbindung in die Benutzeroberfläche kommen zwei verschiedene Möglichkeiten zum Einsatz. Zum einen existiert der StoreConnector, welcher einen bestimmten Teil des zentralen Zustands selektiert und diesen an ein Widget weitergibt. Zum anderen gibt es den StoreBuilder, welcher den kompletten Store an ein Widget weitergibt. Der StoreConnector wird hauptsächlich bei trivialeren Einsatzgebieten verwendet, die nur das Auslesen einer Variable aus dem Store benötigen. Der StoreConnector hingegen bei komplexeren Fällen, die beispielsweise auch Actions depeschieren müssen.

\subsection{Bewertung}

Im folgenden Abschnitt wird die Implementierung mit Redux \autocite[branch=redux]{repo} anhand der definierten Bewertungskriterien bewertet.

\paragraph{\nameref{sec:changeablility}} 

\paragraph{\nameref{sec:testability}} 

\paragraph{\nameref{sec:efficiency}} Nach der Ausführung der Teststrecke, ergaben die Zähler folgendes Ergebnis: 
\lstinputlisting[caption={Anzahl der Render-Vorgänge bei Redux}]{results/redux/benchmarks.txt}

\paragraph{\nameref{sec:complexity}} Die Auswertung der Metriken (vgl. \autoref{metrics:redux}) ergab eine \ac{mi} von 82 für das gesamte Projekt.

\paragraph{\nameref{sec:readability}} 

\paragraph{\nameref{sec:documentation}} 

\paragraph{\nameref{sec:structure}} 