13 KiB
Implementierung der Features
Im Folgenden wird die Implementierung der einzelnen Features des Projektes beschrieben.
\pagebreak
Home Feature
Das Home-Feature ist die Startseite der App. Es besteht aus einem einfachen Screen, der nur den Text "Flutter on Embedded Linux" anzeigt.
\Begin{multicols}{2}
\begin{figure}[H] \caption{Ordnerstruktur des Home-Features} \centering \begin{minipage}{7cm} \dirtree{% .1 home/. .2 presentation/. .3 home\char`_screen.dart. } \end{minipage} \end{figure}
\begin{figure}[H] \caption{Home Screen} \centering {\includegraphics[width=8cm]{./assets/screenshots/home.png}} \label{fig:screeplot} \end{figure}
\End{multicols}
\pagebreak
Material Demo Feature
Das Material Demo Feature zeigt eine Auswahl von Material Design Widgets. Es besteht aus einem Screen, der eine Liste von Widgets anzeigt.
\Begin{multicols}{2}
\begin{figure}[H]
\caption{Ordnerstruktur des Material Demo Features}
\centering
\begin{minipage}{10cm}
\dirtree{%
.1 material\char\_demo/. .2 presentation/. .3 material\char
_demo\char\_screen.dart. .3 widgets/. .4 component\char
_decoration.dart.
}
\end{minipage}
\end{figure}
\begin{figure}[H] \caption{Material Demo Screen} \centering {\includegraphics[width=8cm]{./assets/screenshots/material3.png}} \label{fig:screeplot} \end{figure}
\End{multicols}
\pagebreak
Benchmark
Das Benchmark Feature zeigt verschiedene Benchmarks, die die Leistungsfähigkeit von Flutter auf Embedded Linux demonstrieren.
\begin{figure}[h]
\caption{Example caption}
\centering
\begin{minipage}{7cm}
\dirtree{%
.1 benchmark/.
.2 business/.
.3 flame/.
.4 rogue\char\_shooter/. .4 sprite\char
_renderer/.
.2 data/.
.3 models/.
.4 benchmark.dart.
.4 ember.dart.
.3 benchmarks\char\_list.dart. .2 presentation/. .3 widgets/. .4 benchmark\char
_card.dart.
.3 benchmark\char\_screen.dart. .3 map\char
_benchmark\char\_screen.dart. .3 rogue\char
_shooter\char\_screen.dart. .3 sprite\char
_benchmark\char\_screen.dart. .3 video\char
_benchmark\char\_screen.dart. .3 vsync\char
_benchmark\char`_screen.dart.
}
\end{minipage}
\end{figure}
\begin{multicols}{2}
\begin{figure}[H] \caption{Home Screen} \centering {\includegraphics[width=8cm]{./assets/screenshots/benchmark.png}} \label{fig:screeplot} \end{figure}
\begin{figure}[H] \caption{Home Screen} \centering {\includegraphics[width=8cm]{./assets/screenshots/benchmarkSprite.png}} \label{fig:screeplot} \end{figure}
\end{multicols}
\pagebreak
\begin{multicols}{2}
\begin{figure}[H] \caption{Home Screen} \centering {\includegraphics[width=8cm]{./assets/screenshots/benchmarkSpriteFinished.png}} \label{fig:screeplot} \end{figure}
\begin{figure}[H] \caption{Home Screen} \centering {\includegraphics[width=8cm]{./assets/screenshots/benchmarkFlame.png}} \label{fig:screeplot} \end{figure}
\end{multicols}
\begin{multicols}{2}
\begin{figure}[H] \caption{Home Screen} \centering {\includegraphics[width=8cm]{./assets/screenshots/benchmarkFlame2.png}} \label{fig:screeplot} \end{figure}
\begin{figure}[H] \caption{Home Screen} \centering {\includegraphics[width=8cm]{./assets/screenshots/benchmarkVsync.png}} \label{fig:screeplot} \end{figure}
\end{multicols}
\begin{multicols}{2}
\begin{figure}[H] \caption{Home Screen} \centering {\includegraphics[width=8cm]{./assets/screenshots/benchmarkVideo.png}} \label{fig:screeplot} \end{figure}
\begin{figure}[H] \caption{Home Screen} \centering {\includegraphics[width=8cm]{./assets/screenshots/benchmarkMap.png}} \label{fig:screeplot} \end{figure}
\end{multicols}
\pagebreak
News
Das News Feature zeigt eine Liste von Nachrichten der Tagesschau.
\Begin{multicols}{2}
\begin{figure}[H]
\caption{Example caption}
\centering
\begin{minipage}{7cm}
\dirtree{%
.1 news\char\_api/. .2 business/. .3 news\char
_controller.dart.
.3 scroll\char\_state\char
_controller.dart.
.2 data/.
.3 models/.
.4 news.dart.
.4 region\char\_news.dart. .4 teaser\char
_image\char\_url.dart. .4 teaser\char
_image.dart.
.3 repository/.
.4 news\char\_repository.dart. .2 presentation/. .3 widgets/. .4 news\char
_grid\char\_item.dart. .4 news\char
_grid.dart.
.4 news\char\_list\char
_item.dart.
.4 news\char\_list.dart. .3 news\char
_screen.dart.
}
\end{minipage}
\end{figure}
\begin{figure}[H] \caption{Home Screen} \centering {\includegraphics[width=8cm]{./assets/screenshots/newsList.png}} \label{fig:screeplot} \end{figure}
\begin{figure}[H] \caption{Home Screen} \centering {\includegraphics[width=8cm]{./assets/screenshots/newsGrid.png}} \label{fig:screeplot} \end{figure}
\End{multicols}
\pagebreak
Freezed
wurde verwendet, um die Modelle zu generieren.
\lstinputlisting[language=Java, caption=Implementierung der News Klasse, linerange={0-20}, captionpos=t] {code/flutter_elinux/lib/features/news_api/data/models/news.dart}
\lstinputlisting[language=Java, caption=Implementierung des News Controllers, captionpos=t] {code/flutter_elinux/lib/features/news_api/data/repository/news_repository.dart}
\lstinputlisting[language=Java, caption=Implementierung des News Controllers, captionpos=t] {code/flutter_elinux/lib/features/news_api/business/news_controller.dart}
\pagebreak
Led Morse
\begin{figure}[ht]
\caption{Example caption}
\centering
\begin{minipage}{7cm}
\dirtree{%
.1 morse\char\_led/. .2 business/. .3 service/. .4 morse\char
_service.dart.
.2 presentation/.
.3 led\char`_screen.dart.
}
\end{minipage}
\end{figure}
\begin{multicols}{2}
\begin{figure}[H] \caption{Home Screen} \centering {\includegraphics[width=8cm]{./assets/screenshots/morse.png}} \label{fig:screeplot} \end{figure}
\begin{figure}[H] \caption{Home Screen} \centering {\includegraphics[width=8cm]{./assets/screenshots/morseInput.png}} \label{fig:screeplot} \end{figure}
\end{multicols}
\lstinputlisting[language=Java, caption=Implementierung des Morse Service, captionpos=t] {code/flutter_elinux/lib/features/morse_led/business/service/morse_service.dart}
\pagebreak
Matrix
\begin{figure}[ht]
\caption{Example caption}
\centering
\begin{minipage}{7cm}
\dirtree{%
.1 matrix\char\_rgb/. .2 business/. .3 service/. .4 matrix\char
_service.dart.
.3 utils/.
.4 find\char\_closest\char
_color\char\_index.dart. .2 data/. .3 models/. .4 pixel.dart. .2 presentation/. .3 widgets/. .4 pixel\char
_painter.dart.
.3 matrix\char`_screen.dart.
}
\end{minipage}
\end{figure}
\begin{multicols}{2}
\begin{figure}[H] \caption{Home Screen} \centering {\includegraphics[width=8cm]{./assets/screenshots/matrix.png}} \label{fig:screeplot} \end{figure}
\begin{figure}[H] \caption{Home Screen} \centering {\includegraphics[width=8cm]{./assets/screenshots/matrixInput.png}} \label{fig:screeplot} \end{figure}
\end{multicols}
\pagebreak
\begin{multicols}{2}
\begin{figure}[H] \caption{Home Screen} \centering {\includegraphics[width=8cm]{./assets/screenshots/matrixColor.png}} \label{fig:screeplot} \end{figure}
\begin{figure}[H] \caption{Home Screen} \centering {\includegraphics[width=8cm]{./assets/screenshots/matrixColorWheel.png}} \label{fig:screeplot} \end{figure}
\end{multicols}
\lstinputlisting[language=Java, caption=Implementierung des Matrix Service, captionpos=t] {code/flutter_elinux/lib/features/matrix_rgb/business/service/matrix_service.dart}
\pagebreak
System Informationen
\Begin{multicols}{2}
\begin{figure}[H]
\caption{Example caption}
\centering
\begin{minipage}{7cm}
\dirtree{%
.1 system\char\_resources/. .2 business/. .3 service/. .4 memory\char
_service.dart.
.3 utils/.
.4 get\char\_cpu\char
_usage\char\_percentage.dart. .2 presentation/. .3 system\char
_resources\char`_screen.dart.
}
\end{minipage}
\end{figure}
\begin{figure}[H] \caption{Home Screen} \centering {\includegraphics[width=8cm]{./assets/screenshots/systemResources.png}} \label{fig:screeplot} \end{figure}
\End{multicols}
\lstinputlisting[language=Java, caption=Implementierung des Memory Service, captionpos=t] {code/flutter_elinux/lib/features/system_resources/business/service/memory_service.dart}
\pagebreak
Einstellungen
\Begin{multicols}{2}
\begin{figure}[H]
\caption{Example caption}
\centering
\begin{minipage}{7cm}
\dirtree{%
.1 settings/.
.2 business/.
.3 wifi\char\_controller.dart. .2 presentation/. .3 settings\char
_screen/.
.4 widgets/.
.5 color\char\_seed\char
_button.dart.
.4 settings\char\_screen.dart. .3 wifi\char
_settings\char\_screen/. .4 widgets/. .5 ap\char
_pw\char\_dialog.dart. .5 ap\char
_tile\char\_demo.dart. .5 ap\char
_tile.dart.
.5 wifi\char\_bar\char
_icon.dart.
.4 accesspoint\char\_screen.dart. .4 wifi\char
_settings\char`_screen.dart.
}
\end{minipage}
\end{figure}
\begin{figure}[H] \caption{Home Screen} \centering {\includegraphics[width=8cm]{./assets/screenshots/settings.png}} \label{fig:screeplot} \end{figure}
\begin{figure}[H] \caption{Home Screen} \centering {\includegraphics[width=8cm]{./assets/screenshots/settingsDark.png}} \label{fig:screeplot} \end{figure}
\End{multicols}
\pagebreak
\begin{multicols}{2}
\begin{figure}[H] \caption{Home Screen} \centering {\includegraphics[width=8cm]{./assets/screenshots/settingsWifiList.png}} \label{fig:screeplot} \end{figure}
\begin{figure}[H] \caption{Home Screen} \centering {\includegraphics[width=8cm]{./assets/screenshots/settingsWifiDetails.png}} \label{fig:screeplot} \end{figure}
\end{multicols}
\begin{multicols}{2}
\begin{figure}[H] \caption{Home Screen} \centering {\includegraphics[width=8cm]{./assets/screenshots/settingsWifiConnect.png}} \label{fig:screeplot} \end{figure}
\begin{figure}[H] \caption{Home Screen} \centering {\includegraphics[width=8cm]{./assets/screenshots/settingsWifiPasswordInput.png}} \label{fig:screeplot} \end{figure}
\end{multicols}
\begin{figure}[H] \caption{Home Screen} \centering {\includegraphics[width=8cm]{./assets/screenshots/settingsMaterial2.png}} \label{fig:screeplot} \end{figure}
\pagebreak
\lstinputlisting[language=Java, caption=Implementierung des Wifi Controllers, captionpos=t] {code/flutter_elinux/lib/features/settings/business/wifi_controller.dart}