\item Fragestellung: Wie lässt sich der Zustand einer Flutter-Anwendung am besten verwalten?
\item Evaluation von verschiedenen Lösungsansätzen für die Zustandsverwaltung in Flutter
\item Welcher Lösungsansatz ist am beste für verschiedene Anwendungsfälle geeignet?
\end{itemize}
\end{frame}
\begin{frame}{Motivation}
\begin{itemize}
\item Die Zustandsverwaltung ist ein entscheidender Aspekt einer Flutter-Anwendung
\item Entscheidet mit über dem Erfolg eines Projektes
\item Kein etablierter Standard vorhanden
\item Entscheidung schwer umkehrbar
\end{itemize}
\end{frame}
\begin{frame}{Vorgehen}
\begin{enumerate}
\item Recherche zu bestehenden Zustandsverwaltungssystemen
\item Konstruktion von Anforderungen
\item Ableitung von Bewertungskriterien
\item Erstellung eines Versuchsaufbaus
\item Durchführung und Bewertung
\end{enumerate}
\end{frame}
\section{Grundlagen}
\begin{frame}{Grundlagen}
\begin{itemize}
\item Was ist Flutter?
\item Wie funktioniert Flutter?
\item Was ist die Aufgabe der Zustandsverwaltung in Flutter?
\end{itemize}
\end{frame}
\begin{frame}{Was ist Flutter?}
\begin{itemize}
\item Flutter ist ein Cross-Plattform-Framework zur Entwicklung von Anwendungen für diverse Plattformen wie iOS und Android \autocite{flutterSupportedPlatforms}
\item Ein Quelltext-Basis für alle Plattformen
\item Ziel: Reduzierung des Aufwands bei der Entwicklung
\end{itemize}
\end{frame}
\begin{frame}{Wie funktioniert Flutter?}
\begin{columns}[onlytextwidth,T]
\column{\dimexpr\linewidth-50mm-3mm}
\begin{itemize}
\item Flutter ist ein deklaratives UI-Toolkit
\item$\Rightarrow$ Es wird nur eine \textquote{Bauanleitung} für verschiedene Zustände definiert
\item Die Benutzeroberfläche wird anhand von sogenannten Widgets zusammengesetzt
\item$\Rightarrow$ Es entsteht eine Baumstruktur aus verschiedenen Widgets
\item\textcquote[Kap.1.9]{flutterInAction}{Everything is a widget}
\item\texttt{StatelessWidget}
\begin{itemize}
\item kein eigener Zustand
\item Zustand wird über Konstruktorparameter übergeben
\end{itemize}
\item\texttt{StatefulWidget}
\begin{itemize}
\item Verwaltet eigenen Zustand
\item kann eigenen Zustand selbstständig verändern
\end{itemize}
\item\texttt{InheritedWidget}
\begin{itemize}
\item andere Widgets können auf den Zustand zugreifen
\item zugreifende Widgets ändern sich, falls sich der Zustand
\item eigener Zustand kann nicht selbstständig verändert werden
\end{itemize}
\end{itemize}
\end{frame}
\begin{frame}{Aufgabe der Zustandsverwaltung}
\foreignblockcquote{american}[Kap.8.1.2]{flutterInAction}{State management is a combination of passing data around the app, but also re-rendering pieces of your app at the right time.}
\foreignblockcquote{american}[Kap.1]{managingStateInFlutter}{State management is simply a technique, or multiple techniques, used to take care of the changes that occur in your application.}
\end{frame}
\begin{frame}{Aufgabe der Zustandsverwaltung}
\begin{itemize}
\item Verwaltung von Änderungen in der App
\item Neu Rendern von Widgets zur richtigen Zeit
\item Verteilung von Daten innerhalb der App
\item Aufteilung in verschieden Zustandsebenen \autocite{appState}
\item Anwendungsbeispiele: Anmeldezustand, Einstellungen, Einkaufskorb in einer Shopping-App