final small changes
This commit is contained in:
parent
31fd6a413f
commit
05455c7793
30
Bachelor.bib
30
Bachelor.bib
@ -103,6 +103,17 @@
|
||||
file = {/Users/fabian/Zotero/storage/Z2MJS6AP/crops.html}
|
||||
}
|
||||
|
||||
@software{CunaristRinf2024,
|
||||
title = {Cunarist/Rinf},
|
||||
date = {2024-03-21T21:50:33Z},
|
||||
origdate = {2023-02-15T14:47:18Z},
|
||||
url = {https://github.com/cunarist/rinf},
|
||||
urldate = {2024-03-22},
|
||||
abstract = {Rust for native business logic, Flutter for flexible and beautiful GUI},
|
||||
organization = {Cunarist},
|
||||
keywords = {android,app,cross-platform,dart,ffi,flutter,gui,ios,linux,macos,production-ready,restful-api,rust,web,windows}
|
||||
}
|
||||
|
||||
@online{CustomFlutterEnginec,
|
||||
title = {Custom {{Flutter Engine Embedders}}},
|
||||
url = {https://github.com/flutter/flutter/wiki/Custom-Flutter-Engine-Embedders},
|
||||
@ -910,6 +921,14 @@
|
||||
file = {/Users/fabian/Zotero/storage/4YEIHLEH/why-gnu-linux.en.html}
|
||||
}
|
||||
|
||||
@online{Riverpod,
|
||||
title = {Riverpod},
|
||||
url = {https://riverpod.dev/},
|
||||
urldate = {2024-03-22},
|
||||
langid = {english},
|
||||
file = {/Users/fabian/Zotero/storage/KM39FJQT/riverpod.dev.html}
|
||||
}
|
||||
|
||||
@online{Roadmap,
|
||||
title = {Roadmap},
|
||||
url = {https://github.com/flutter/flutter/wiki/Roadmap},
|
||||
@ -927,6 +946,17 @@
|
||||
publisher = {Université de Liège, Liège, Belgique}
|
||||
}
|
||||
|
||||
@software{rousseletRrousselGitRiverpod2024,
|
||||
title = {{{rrousselGit}}/Riverpod},
|
||||
author = {Rousselet, Remi},
|
||||
date = {2024-03-21T23:37:31Z},
|
||||
origdate = {2020-04-16T10:40:29Z},
|
||||
url = {https://github.com/rrousselGit/riverpod},
|
||||
urldate = {2024-03-22},
|
||||
abstract = {A reactive caching and data-binding framework. Riverpod makes working with asynchronous code a breeze.},
|
||||
keywords = {dart,flutter,hacktoberfest,inheritedwidget,provider,riverpod,service-locator,state-management}
|
||||
}
|
||||
|
||||
@online{RpifirmwareAddFirmware,
|
||||
title = {Rpi-Firmware: Add Firmware for Zero 2w by Classabbyamp · {{Pull Request}} \#39123 · Void-Linux/Void-Packages},
|
||||
url = {https://github.com/void-linux/void-packages/pull/39123},
|
||||
|
Binary file not shown.
Binary file not shown.
@ -2,26 +2,20 @@
|
||||
|
||||
\renewcommand{\headrulewidth}{0pt}
|
||||
|
||||
\begin{abstract}
|
||||
Die Integration von Flutter's plattformübergreifenden
|
||||
UI-Fähigkeiten mit der Anpassungsfähigkeit von Embedded
|
||||
Linux verspricht die Rationalisierung der Entwicklung
|
||||
von Benutzeroberflächen (UIs) für eingebettete Systeme.
|
||||
Diese Arbeit untersucht die Eignung von Flutter in
|
||||
\subsection*{Abstract}
|
||||
|
||||
\noindent
|
||||
|
||||
Die Nutzung des quelloffenen Benutzerschnittstellen-Entwicklungs-Kit
|
||||
Flutter für eingebettete Linux-Systeme ist ein neuer Ansatz, der
|
||||
die Entwicklung von Benutzeroberflächen für eingebettete Systeme
|
||||
vereinfachen könnte. Diese Arbeit untersucht deswegen die Eignung von Flutter in
|
||||
diesem Kontext durch eine Fallstudie: die Entwicklung
|
||||
einer Demo Anwendung mit Flutter für einen Raspberry
|
||||
Pi mit einer angepassten eingebetteten Linux Distribution.
|
||||
Leistungsmesswerte und der Entwicklungsprozess werden bewertet.
|
||||
Leistungsmesswerte und der Entwicklungsprozess werden dokumentiert.
|
||||
Die Ergebnisse zeigen, dass Flutter, wenn es angepasst wird,
|
||||
erfolgreich zur Erstellung von attraktiven und benutzerfreundlichen
|
||||
eingebetteten Schnittstellen mit wenigen Kompromissen
|
||||
bei der Leistung genutzt werden kann. \\
|
||||
|
||||
Die Arbeit beschäftigt sich im Wesentlichen mit der Entwicklung einer
|
||||
prototypischen Anwendung mit Flutter für ein eingebettetes Linux System.
|
||||
Dabei wurde ein Konzept ausgearbeitet, dass zeigt wie Flutter in
|
||||
eingebetteten Linux Systemen genutzt werden kann und es wurde anhand der
|
||||
prototypischen Anwendung untersucht, wie gut Flutter für diesen
|
||||
Verwendungszweck geeignet ist. Es wurden dabei speziell die Embedder
|
||||
bei der Leistung genutzt werden kann. Es wurden dabei speziell die Embedder
|
||||
Flutter-Pi und Flutter-Auto genauer untersucht.
|
||||
\end{abstract}
|
||||
|
@ -118,6 +118,28 @@ Für die Demo App ist dies besonders wichtig, da die Anwendung als
|
||||
Einstiegspunkt so später umstrukturiert werden kann für andere
|
||||
Anwendungen, die auf der Demo App aufbauen.
|
||||
|
||||
## Riverpod
|
||||
|
||||
Riverpod ist ein einfaches, aber leistungsstarkes
|
||||
State-Management-Tool für Flutter. Es wurde entwickelt,
|
||||
um die Verwaltung des Zustands in Flutter-Anwendungen
|
||||
zu vereinfachen [@rousseletRrousselGitRiverpod2024]. In dem Projekt wurde
|
||||
Riverpod genutzt, um die Zustandsverwaltung der Anwendung
|
||||
zwischen der Prästentations- und Geschäftsschicht zu
|
||||
verwalten. In der Präsentationsschicht werden die
|
||||
Provider genutzt, um den Zustand von diesen auszulesen und
|
||||
in der Geschäftsschicht werden die Provider mithilfe des
|
||||
Riverpod Generators generiert.
|
||||
Der Riverpod Generator ist ein Code-Generator, der
|
||||
mit Riverpod verwendet wird, um die Provider und anderen
|
||||
Boilerplate-Code automatisch zu generieren. Genutzt wird
|
||||
der Generator mit der Definition "@riverpod" am Anfang
|
||||
einer Klasse oder Funktion. Mit dem Paket "_riverpod_annotation_"
|
||||
werden dabei Hinweise im Code Editor angezeigt, die zeigen,
|
||||
ob der Code für den Generator korrekt ist oder nicht.
|
||||
Das Projekt ist so konfiguriert, dass "_riverpod_annotation_"
|
||||
aktiviert ist. Generierte Dart Dateien enden mit "_.g.dart_".
|
||||
|
||||
<!-- eine Klasse pro File, Ausnahmen eng zusammengehörige Klassen
|
||||
wie zB. Stateful Widgets
|
||||
|
||||
|
@ -450,3 +450,5 @@ Der Fehler tritt wahrscheinlich auf, weil die Anwendung nicht den Einstiegspunkt
|
||||
in der "_MaterialApp_" richtig neuladen kann. Es ist aber unklar wieso
|
||||
es nur beim ersten Mal passiert und die Fehlernachricht hilft in diesem
|
||||
Fall nicht weiter.
|
||||
|
||||
# Implementierung der Features {#features}
|
||||
|
@ -1,7 +1,3 @@
|
||||
\pagebreak
|
||||
|
||||
# Implementierung der Features {#features}
|
||||
|
||||
Im Folgenden wird die Implementierung der
|
||||
einzelnen Features des Projektes beschrieben. Jedes
|
||||
Feature beschreibt einen Seitenbereich in der entwickelten Flutter Anwendung.
|
||||
@ -45,8 +41,6 @@ besteht aus einem einfachen Screen, der
|
||||
nur den Text "Flutter on Embedded Linux" anzeigt (siehe Abbildung
|
||||
\ref{homeScreen}).
|
||||
|
||||
\pagebreak
|
||||
|
||||
\begin{multicols}{2}
|
||||
|
||||
\begin{figure}[H]
|
||||
|
@ -5,6 +5,8 @@ Raster aus Karten mit den verschiedenen Benchmark Tests,
|
||||
welche ausgewählt werden können (siehe Abbildung \ref{benchmark}).
|
||||
Im folgenden wird jeder Benchmark Test genauer beschrieben.
|
||||
|
||||
\pagebreak
|
||||
|
||||
\begin{multicols}{2}
|
||||
|
||||
\begin{figure}[H]
|
||||
@ -90,6 +92,8 @@ erlaubt es normalen GLSL Shader Code in der Engine zu verwenden, der Code
|
||||
muss dazu nur manchmal leicht angepasst werden [@googleinc.WritingUsingFragment].
|
||||
Der Shader Code von Shader Toy musste nur leicht angepasst werden.
|
||||
|
||||
\pagebreak
|
||||
|
||||
\begin{multicols}{2}
|
||||
|
||||
\begin{figure}[H]
|
||||
@ -129,6 +133,8 @@ Im Test kann man visuell beobachten, ob die Karte flüssig bewegt
|
||||
werden kann und wie schnell die Tiles aus dem Internet geladen werden können
|
||||
(siehe Abbildung \ref{benchmarkMap}).
|
||||
|
||||
\pagebreak
|
||||
|
||||
\begin{multicols}{2}
|
||||
|
||||
\begin{figure}[H]
|
||||
|
@ -13,8 +13,6 @@ Angeboten, welche explizit unter der CC-Lizenz stehen.
|
||||
Außerdem soll man mit nicht mehr als 60 Abrufen pro Stunde tätigen,
|
||||
was für die Testzwecke in dieser Arbeit ausreichend ist [@TagesschauAPIOpenAPIa].
|
||||
|
||||
\pagebreak
|
||||
|
||||
\Begin{multicols}{2}
|
||||
|
||||
\begin{figure}[H]
|
||||
|
@ -147,6 +147,17 @@ umzusetzen. Der Einsatz der CustomPainter in Flutter zeigte auch, dass man
|
||||
falls notwendig in Flutter relativ einfach angepasste komplexere Widgets
|
||||
erstellen kann wie die Pixel-Matrix für die Ansteuerung der RGB-Matrix.
|
||||
|
||||
Mit dem zusätzlichen Testgerät Raspberry Pi Zero 2W konnte gezeigt werden,
|
||||
dass Flutter auch auf schwächeren Geräten lauffähig ist und die Anwendung
|
||||
läuft auf diesem Gerät auch weitesgehend flüssig, kam jedoch hin und wieder
|
||||
an seine Grenzen. Der Leistungsbereich eines Pi Zero 2W scheint hier also im
|
||||
Bereich der minimalen Anforderungen von Flutter zu liegen. Für Anwendungen
|
||||
ohne stark aufwendige Animationen und an kleinen Displays mit einer niedrigen
|
||||
Auflösung ist der Pi Zero 2W durchaus noch gut zur Nutzung geeignet. In der
|
||||
Programmierung sollte auch besser versucht werden den Verbrauch vom Arbeitsspeicher
|
||||
gering zu halten und Sicherheitsmaßnahmen treffen, welche verhindern, dass
|
||||
der Arbeitsspeicher überläuft und die Anwendung abstürzt.
|
||||
|
||||
## Zukünftige Verbesserungen und Ideen
|
||||
|
||||
### Behebung von Fehlern
|
||||
@ -174,4 +185,16 @@ Der zusätzliche Wechsel von OpenGL zu Vulkan könnte die
|
||||
Leistung eventuell auch verbessern, da Vulkan eine modernere
|
||||
API ist und der Nachfolger von OpenGL ist. [@googleinc.ImpellerRenderingEngine]
|
||||
|
||||
### Nutzung von Rust
|
||||
|
||||
Mit dem Projekt "_rinf_" (Rust in Flutter) ist es möglich ohne
|
||||
großen Aufwand Rust Code in Flutter zu nutzen [@CunaristRinf2024]. Rust ist eine
|
||||
sehr performante Programmiersprache die genutzt werden könnte
|
||||
um die Leistung von Flutter im eingebetteten Bereich zu verbessern,
|
||||
indem Funktionen die viel Rechenleistung benötigen in Rust
|
||||
implementiert werden. Besonders bei leistungsschwachen Geräten
|
||||
wie dem Raspberry Pi Zero 2W könnte dies die Leistung
|
||||
verbessern. Die Nutzung von Rinf mit Yocto müsste dazu
|
||||
getestet werden.
|
||||
|
||||
# Schlussfolgerung
|
||||
|
Loading…
x
Reference in New Issue
Block a user