diff --git a/.DS_Store b/.DS_Store
index 56da70f..1a3c99b 100644
Binary files a/.DS_Store and b/.DS_Store differ
diff --git a/.mermaid-config.json b/.mermaid-config.json
new file mode 100644
index 0000000..6017c06
--- /dev/null
+++ b/.mermaid-config.json
@@ -0,0 +1,8 @@
+{
+ "theme": "neutral",
+ "fontFamily": "Times New Roman",
+ "actorFontFamily": "Times New Roman",
+ "noteFontFamily": "Times New Roman",
+ "messageFontFamily": "Times New Roman",
+ "personFontFamily": "Times New Roman"
+}
\ No newline at end of file
diff --git a/chapters/03_grundlagen/02_raspberryPi.md b/.mermaid.css
similarity index 100%
rename from chapters/03_grundlagen/02_raspberryPi.md
rename to .mermaid.css
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 301d8ad..5a24e30 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,11 +1,13 @@
{
- "folder-path-color.folders": [
- { "path": "chapters/01", "symbol": "SR", "tooltip": "Source files" },
- { "path": "chapters/02", "symbol": "T", "tooltip": "Common" },
- { "path": "chapters/03", "symbol": "T", "tooltip": "Common" },
- { "path": "chapters/04", "symbol": "T", "tooltip": "Common" },
- { "path": "chapters/05", "symbol": "T", "tooltip": "Common" },
- { "path": "chapters/06", "symbol": "T", "tooltip": "Common" },
- { "path": "chapters/07", "symbol": "T", "tooltip": "Common" },
- ]
-}
\ No newline at end of file
+ "folder-path-color.folders": [
+ { "path": "chapters/01", "symbol": "SR", "tooltip": "01" },
+ { "path": "chapters/02", "symbol": "T", "tooltip": "02" },
+ { "path": "chapters/03", "symbol": "T", "tooltip": "03" },
+ { "path": "chapters/04", "symbol": "T", "tooltip": "04" },
+ { "path": "chapters/05", "symbol": "T", "tooltip": "05" },
+ { "path": "chapters/06", "symbol": "T", "tooltip": "06" },
+ { "path": "chapters/07", "symbol": "T", "tooltip": "07" }
+ ],
+ "cSpell.enabled": true,
+ "cSpell.enableFiletypes": ["markdown_latex_combined"]
+}
diff --git a/.vscode/tasks.json b/.vscode/tasks.json
new file mode 100644
index 0000000..e6efec9
--- /dev/null
+++ b/.vscode/tasks.json
@@ -0,0 +1,16 @@
+{
+ // See https://go.microsoft.com/fwlink/?LinkId=733558
+ // for the documentation about the tasks.json format
+ "version": "2.0.0",
+ "tasks": [
+ {
+ "label": "make",
+ "type": "shell",
+ "command": "make",
+ "group": {
+ "kind": "build",
+ "isDefault": true
+ }
+ }
+ ]
+}
diff --git a/Bachelor.bib b/Bachelor.bib
index c0a4f67..80459d5 100644
--- a/Bachelor.bib
+++ b/Bachelor.bib
@@ -1,3 +1,25 @@
+@online{0andriyAnswerWhatMinimum2015,
+ title = {Answer to "{{What}} Is the Minimum Amount of {{RAM}} Required to Run {{Linux}} Kernel on an {{Embedded}} Device?"},
+ shorttitle = {Answer to "{{What}} Is the Minimum Amount of {{RAM}} Required to Run {{Linux}} Kernel on an {{Embedded}} Device?},
+ author = {0andriy},
+ date = {2015-01-14},
+ url = {https://stackoverflow.com/a/27950451},
+ urldate = {2024-02-19},
+ organization = {{Stack Overflow}},
+ file = {/Users/fabian/Zotero/storage/HNIIPU6S/what-is-the-minimum-amount-of-ram-required-to-run-linux-kernel-on-an-embedded-de.html}
+}
+
+@online{3ClauseBSDLicense2011,
+ title = {The 3-{{Clause BSD License}}},
+ date = {2011-05-22T22:21:11+00:00},
+ url = {https://opensource.org/license/bsd-3-clause/},
+ urldate = {2024-02-18},
+ abstract = {Note: This license has also been called the “New BSD License” or “Modified BSD License”. See also the 2-clause BSD License. Copyright {$<$}YEAR{$>$} {$<$}COPYRIGHT HOLDER{$>$} R…},
+ langid = {american},
+ organization = {{Open Source Initiative}},
+ file = {/Users/fabian/Zotero/storage/ZHWXNYXB/bsd-3-clause.html}
+}
+
@online{bizzottoComparisonPopularFlutter2023,
title = {A {{Comparison}} of {{Popular Flutter App Architectures}}},
author = {Bizzotto, Andrea},
@@ -10,6 +32,53 @@
file = {/Users/fabian/Zotero/storage/DUDXBAGD/comparison-flutter-app-architectures.html}
}
+@article{dechenshawSystemsSystemsCyberPhysical2016,
+ title = {Systems of {{Systems}}, {{Cyber-Physical Systems}}, the {{Internet-of-Things}}…whatever {{Next}}?},
+ author = {family=C Henshaw, given=Michael J., prefix=de, useprefix=true},
+ date = {2016},
+ journaltitle = {INSIGHT},
+ volume = {19},
+ number = {3},
+ pages = {51--54},
+ issn = {2156-4868},
+ doi = {10.1002/inst.12109},
+ url = {https://onlinelibrary.wiley.com/doi/abs/10.1002/inst.12109},
+ urldate = {2024-02-15},
+ abstract = {This paper considers the concepts of systems of systems, cyber-physical systems, and the Internet-of-things. Although originating from different domains and perspectives, there is considerable convergence of the three concepts in terms of future complex systems, and it is concluded that the Internet-of-things is essentially a cyber-physical system of systems which will require new approaches in systems engineering to be developed.},
+ langid = {english},
+ file = {/Users/fabian/Zotero/storage/L4V53253/inst.html}
+}
+
+@article{dibattistaModellingDiseaseTransmission,
+ title = {Modelling Disease Transmission from Touchscreen User Interfaces},
+ author = {Di Battista, Andrew and Nicolaides, Christos and Georgiou, Orestis},
+ journaltitle = {Royal Society Open Science},
+ shortjournal = {R Soc Open Sci},
+ volume = {8},
+ number = {7},
+ eprint = {34350020},
+ eprinttype = {pmid},
+ pages = {210625},
+ issn = {2054-5703},
+ doi = {10.1098/rsos.210625},
+ url = {https://www.ncbi.nlm.nih.gov/pmc/articles/PMC8316822/},
+ urldate = {2024-02-22},
+ abstract = {The extensive use of touchscreens for all manner of human–computer interactions has made them plausible instruments of touch-mediated disease transmission. To that end, we employ stochastic simulations to model human–fomite interaction with a distinct focus on touchscreen interfaces. The timings and frequency of interactions from within a closed population of infectious and susceptible individuals was modelled using a queuing network. A pseudo-reproductive number R was used to compare outcomes under various parameter conditions. We then apply the simulation to a specific real-world scenario; namely that of airport self-check-in and baggage drop. A counterintuitive result was that R decreased with increased touch rates required for touchscreen interaction. Additionally, as one of few parameters to be controlled, the rate of cleaning/disinfecting screens plays an essential role in mitigating R, though alternative technological strategies could prove more effective. The simulation model developed provides a foundation for future advances in more sophisticated fomite disease-transmission modelling.},
+ pmcid = {PMC8316822},
+ file = {/Users/fabian/Zotero/storage/UY4WG89R/Di Battista et al_Modelling disease transmission from touchscreen user interfaces.pdf}
+}
+
+@online{dikkyryanpratamaWhatLinuxDistribution,
+ title = {What {{Is Linux Distribution}}?},
+ author = {{Dikky Ryan Pratama}},
+ url = {https://www.alibabacloud.com/blog/what-is-linux-distribution_599979},
+ urldate = {2024-02-22},
+ abstract = {The article explains what a Linux distribution is, its main characteristics and components, how it caters to a wide range of users and purposes.},
+ langid = {english},
+ organization = {{Alibaba Cloud Community}},
+ file = {/Users/fabian/Zotero/storage/LAGSLH4P/what-is-linux-distribution_599979.html}
+}
+
@online{FlutterArchitecturalOverviewb,
title = {Flutter Architectural Overview},
url = {https://docs.flutter.dev/resources/architectural-overview},
@@ -28,8 +97,62 @@
file = {/Users/fabian/Zotero/storage/V9T5LLK6/inside-flutter.html}
}
-@online{IntroductionDeclarativeUI,
+@online{FlutterGPU,
+ title = {Flutter {{GPU}}},
+ url = {https://github.com/flutter/flutter/wiki/Flutter-GPU},
+ urldate = {2024-02-15},
+ abstract = {Flutter makes it easy and fast to build beautiful apps for mobile and beyond - flutter/flutter},
+ langid = {english},
+ organization = {{GitHub}},
+ file = {/Users/fabian/Zotero/storage/VVZT5YJA/Flutter-GPU.html}
+}
+
+@online{FlutterWeiSuoYouPingMuChuangZaoJingCai,
+ title = {Flutter: 为所有屏幕创造精彩},
+ shorttitle = {Flutter},
+ url = {https://flutter.cn/},
+ urldate = {2024-02-23},
+ abstract = {Flutter 官方文档中文版,包含 SDK 下载、最新特性介绍、代码示例、开发文档、中文社区等内容。},
+ langid = {chinese}
+}
+
+@online{ganssleWhatEmbedded2008,
+ title = {What's {{Embedded}}?},
+ author = {Ganssle, Jack},
+ date = {2008-03-17T13:06:00+00:00},
+ url = {https://www.embedded.com/whats-embedded/},
+ urldate = {2024-02-22},
+ abstract = {At the 2004 ESC Wind River's Jerry Fiddler claimed that there is no real embedded systems market. He felt that it was all about "the device," and in},
+ langid = {american},
+ organization = {{Embedded.com}},
+ file = {/Users/fabian/Zotero/storage/XNVLRL6Q/whats-embedded.html}
+}
+
+@online{gardeFlutterRaspberryPi2018,
+ title = {Flutter on {{Raspberry Pi}} (Mostly) from {{Scratch}}},
+ author = {Garde, Chinmay},
+ date = {2018-11-30T11:44:00},
+ url = {https://medium.com/flutter/flutter-on-raspberry-pi-mostly-from-scratch-2824c5e7dcb1},
+ urldate = {2023-11-13},
+ abstract = {This document describes an experiment in porting the Flutter engine to a target that is currently not supported. That fact that I used a…},
+ langid = {english},
+ organization = {{Flutter}},
+ file = {/Users/fabian/Zotero/storage/3K7HX2EI/flutter-on-raspberry-pi-mostly-from-scratch-2824c5e7dcb1.html}
+}
+
+@online{googleinc.FutterBuildAny,
+ title = {Futter - {{Build}} for Any Screen},
+ author = {{Google Inc.}},
+ url = {https://flutter.dev/},
+ urldate = {2024-02-22},
+ abstract = {Flutter transforms the entire app development process. Build, test, and deploy beautiful mobile, web, desktop, and embedded apps from a single codebase.},
+ langid = {english},
+ file = {/Users/fabian/Zotero/storage/FUSDYG34/flutter.dev.html}
+}
+
+@online{googleinc.IntroductionDeclarativeUI,
title = {Introduction to Declarative {{UI}}},
+ author = {{Google Inc.}},
url = {https://docs.flutter.dev/get-started/flutter-for/declarative},
urldate = {2024-02-13},
abstract = {Explains the difference between a declarative and imperative programming style.},
@@ -37,6 +160,101 @@
file = {/Users/fabian/Zotero/storage/F6LI3FTY/declarative.html}
}
+@book{hajianFlutterEngineering2024,
+ title = {Flutter Engineering},
+ author = {Hajian, Majid},
+ date = {2024-01-18},
+ publisher = {{Staten House}},
+ abstract = {Become a Flutter professional using tactics explained from a software engineer's perspective.This book covers various software engineering topics in Flutter and is divided into five parts, each addressing specific areas of interest and expertise.Foundation of Flutter Engineering introduces software engineering concepts specifically relevant to Flutter. It starts by explaining the fundamental principles of Flutter and how they work and then moves on to demonstrate how these concepts can be applied within the Flutter framework. This section also covers coding design patterns that help readers develop a foundational understanding of the subject matter.Architecture: beginning with basic principles and progressing onto different styles and patterns in architectural design. It covers essential concepts such as concurrency, parallelism, dependency injection, and state management. Additionally, this section explores the architectural factors involved in developing offline apps, guiding readers on strategic thinking and decision-making in software architecture.Processes part covers rules and guidelines, continuous delivery and integration, testing methodologies, and effective documentation practices in a comprehensive manner. This section gives readers the knowledge needed to streamline and efficiently develop apps.Ethical Engineering discusses the OWASP Top 10 security risks, privacy standards, and accessibility considerations. The section emphasizes creating inclusive and secure applications that value user privacy.Advancing UI Development explores adaptive and responsive UIs and sophisticated topics like custom painting, shaders, internationalization, localization, and effective theming in Flutter. This section enhances the reader’s skills in creating visually appealing and user-friendly interfaces.Whether a beginner or an experienced developer, this book can offer you something to learn.},
+ isbn = {9798889405528},
+ langid = {Englisch},
+ pagetotal = {547}
+}
+
+@book{heathEmbeddedSystemsDesign2002,
+ title = {Embedded Systems Design},
+ author = {Heath, Steve},
+ date = {2002},
+ publisher = {{Elsevier}},
+ isbn = {0-08-047756-9}
+}
+
+@online{HowGitObject,
+ title = {How {{Git}} Object Deduplication Works in {{GitLab}} | {{GitLab}}},
+ url = {https://docs.gitlab.com/ee/development/git_object_deduplication.html},
+ urldate = {2024-02-19},
+ abstract = {GitLab product documentation.},
+ langid = {american},
+ file = {/Users/fabian/Zotero/storage/4GAFAAXS/git_object_deduplication.html}
+}
+
+@online{IntroductionDeclarativeUIa,
+ title = {Introduction to Declarative {{UI}}},
+ url = {https://docs.flutter.dev/get-started/flutter-for/declarative},
+ urldate = {2024-02-18},
+ abstract = {Explains the difference between a declarative and imperative programming style.},
+ langid = {english},
+ file = {/Users/fabian/Zotero/storage/HRKBSWAK/declarative.html}
+}
+
+@letter{itoYoctoTimeZone2018,
+ type = {E-mail},
+ title = {[Yocto] Time Zone},
+ author = {Ito, Takayasu},
+ year = {Wed Oct 24 17:56:10 PDT 2018},
+ url = {https://docs.yoctoproject.org/pipermail/yocto/2018-October/042964.html},
+ urldate = {2024-03-04},
+ file = {/Users/fabian/Zotero/storage/5RDNK486/042964.html}
+}
+
+@article{korogluComparisonKeypadsTouchscreen2015,
+ title = {Comparison of Keypads and Touch-Screen Mobile Phones/Devices as Potential Risk for Microbial Contamination},
+ author = {Koroglu, Mehmet and Gunal, Selami and Yildiz, Fatma and Savas, Mehtap and Ozer, Ali and Altindis, Mustafa},
+ date = {2015-12-30},
+ journaltitle = {Journal of Infection in Developing Countries},
+ shortjournal = {J Infect Dev Ctries},
+ volume = {9},
+ number = {12},
+ eprint = {26719936},
+ eprinttype = {pmid},
+ pages = {1308--1314},
+ issn = {1972-2680},
+ doi = {10.3855/jidc.6171},
+ abstract = {INTRODUCTION: Touch-screen mobile phones/devices (TMPs/Ds) are increasingly used in hospitals. They may act as a mobile reservoir for microbial pathogens. The rates of microbial contamination of TMPs/Ds and keypad mobile phones (KMPs) with respect to different variables including use by healthcare workers (HCWs)/non-HCWs and the demographic characteristics of users were investigated. METHODOLOGY: A total of 205 mobile phones/devices were screened for microbial contamination: 76 devices belonged to HCWs and 129 devices belonged to the non-HCW group. By rubbing swabs to front screen, back, keypad, and metallic surfaces of devices, 444 samples were collected. RESULTS: Of 205 mobile phones/devices, 143 (97.9\%) of the TMPs/Ds and 58 (98.3\%) of the KMPs were positive for microbial contamination, and there were no significant differences in contamination rates between these groups, although TMPs/Ds had significantly higher microbial load than KMPs (p {$<$}0.05). The significant difference in this analysis was attributable to the screen size of mobile phones ≥ 5". Microbial contamination rates increased significantly as phone size increased (p {$<$}0.05). Higher numbers of coagulase-negative Staphylococci (CNS) were isolated from KMPs than TMPs/Ds (p = 0.049). The incidence of Enterococcus spp. was higher on the KMPs of HCWs, and methicillin resistant CNS was higher from the TMPs/Ds of non-HCWs (p {$<$}0.05). Isolation of CNS, Streptococcus spp. and Escherichia coli was higher from the TMPs/Ds of HCWs (p {$<$}0.05). CONCLUSIONS: We found no significant difference between TMP/Ds and KMPs in terms of microbial contamination, but TMP/Ds harboured more colonies and total microbial counts increased with screen size.},
+ langid = {english},
+ keywords = {Adult,Bacteria,Cross-Sectional Studies,Environmental Microbiology,Equipment Contamination,Fungi,Health Personnel,Hospitals,Humans,Male,Middle Aged,Prospective Studies,Telecommunications,Young Adult},
+ file = {/Users/fabian/Zotero/storage/TFSCZX36/Koroglu et al_2015_Comparison of keypads and touch-screen mobile phones-devices as potential risk.pdf}
+}
+
+@book{leeIntroductionEmbeddedSystems2016,
+ title = {Introduction to Embedded Systems: {{A}} Cyber-Physical Systems Approach},
+ author = {Lee, Edward Ashford and Seshia, Sanjit Arunkumar},
+ date = {2016},
+ publisher = {{MIT press}},
+ isbn = {0-262-53381-2}
+}
+
+@article{leePresentFutureCyberPhysical2015,
+ title = {The {{Past}}, {{Present}} and {{Future}} of {{Cyber-Physical Systems}}: {{A Focus}} on {{Models}}},
+ shorttitle = {The {{Past}}, {{Present}} and {{Future}} of {{Cyber-Physical Systems}}},
+ author = {Lee, Edward A.},
+ date = {2015-03},
+ journaltitle = {Sensors},
+ volume = {15},
+ number = {3},
+ pages = {4837--4869},
+ publisher = {{Multidisciplinary Digital Publishing Institute}},
+ issn = {1424-8220},
+ doi = {10.3390/s150304837},
+ url = {https://www.mdpi.com/1424-8220/15/3/4837},
+ urldate = {2024-02-15},
+ abstract = {This paper is about better engineering of cyber-physical systems (CPSs) through better models. Deterministic models have historically proven extremely useful and arguably form the kingpin of the industrial revolution and the digital and information technology revolutions. Key deterministic models that have proven successful include differential equations, synchronous digital logic and single-threaded imperative programs. Cyber-physical systems, however, combine these models in such a way that determinism is not preserved. Two projects show that deterministic CPS models with faithful physical realizations are possible and practical. The first project is PRET, which shows that the timing precision of synchronous digital logic can be practically made available at the software level of abstraction. The second project is Ptides (programming temporally-integrated distributed embedded systems), which shows that deterministic models for distributed cyber-physical systems have practical faithful realizations. These projects are existence proofs that deterministic CPS models are possible and practical.},
+ issue = {3},
+ langid = {english},
+ keywords = {clock synchronization,cyber-physical systems,distributed systems,PRET machines,real-time systems,time synchronization},
+ file = {/Users/fabian/Zotero/storage/IGCKHF3Y/Lee_2015_The Past, Present and Future of Cyber-Physical Systems.pdf}
+}
+
@online{linuxfoundationYoctoProject162024,
title = {The {{Yocto Project}} ® 4.0.16 Documentation},
author = {{Linux Foundation}},
@@ -46,6 +264,62 @@
file = {/Users/fabian/Zotero/storage/WWAQWEK2/singleindex.html}
}
+@book{marwedelEmbeddedSystemDesign2021,
+ title = {Embedded System Design: Embedded Systems Foundations of Cyber-Physical Systems, and the Internet of Things},
+ author = {Marwedel, Peter},
+ date = {2021},
+ publisher = {{Springer Nature}},
+ isbn = {3-030-60910-3}
+}
+
+@article{oszutowska-mazurekAssociationsKnowledgeBehaviours2021,
+ title = {The {{Associations}} between {{Knowledge}} and {{Behaviours Related}} to {{Touch Screens}} and {{Microbiological Threats}} among {{IT Students}}’},
+ author = {Oszutowska-Mazurek, Dorota and Fastowicz, Jaroslaw and Mazurek, Przemyslaw},
+ date = {2021-09-02},
+ journaltitle = {International Journal of Environmental Research and Public Health},
+ shortjournal = {Int J Environ Res Public Health},
+ volume = {18},
+ number = {17},
+ eprint = {34501860},
+ eprinttype = {pmid},
+ pages = {9269},
+ issn = {1661-7827},
+ doi = {10.3390/ijerph18179269},
+ url = {https://www.ncbi.nlm.nih.gov/pmc/articles/PMC8431698/},
+ urldate = {2024-02-22},
+ abstract = {Current issue like the COVID–19 pandemic show how elementary knowledge and hygiene behaviours are important for ordinary people. Microbiological hazards, not just viruses, can be transmitted in various ways through touch screens. For ordinary users, there is a wide range of behaviours that affect the ability to transfer microbial hazards (viruses, bacteria and fungi). The purpose of the paper is to analyse the association between knowledge and behaviour of touch screen users based on surveys. This paper presents selected results of a survey conducted at the end of 2019 (pre–COVID–19 survey). The survey was conducted on a group of 172 IT school students. The relationship between responses using a 2D linear model regression and clustering is used. Most respondents believe that bacteria were more common than viruses on touch screens. The respondents declare altruism in terms of a greater willingness to lend their smartphone, rather than to use someone else’s. An interesting result is that respondents often lend their smartphone to others, while being aware that viruses or bacteria are present on the touch screens. The results can be used in terms of changes in the education process of smartphone users in relation to microbiological hazards.},
+ pmcid = {PMC8431698},
+ file = {/Users/fabian/Zotero/storage/4GH3EW8M/Oszutowska-Mazurek et al_2021_The Associations between Knowledge and Behaviours Related to Touch Screens and.pdf}
+}
+
+@article{palKeypadMobilePhones2013,
+ title = {Keypad Mobile Phones Are Associated with a Significant Increased Risk of Microbial Contamination Compared to Touch Screen Phones},
+ author = {Pal, Pallavi and Roy, Ashoke and Moore, Ginny and Muzslay, Monika and Lee, Elaine and Alder, Sarah and Wilson, Peter and Powles, Tom and Wilson, Peter and Kelly, John},
+ date = {2013-03-01},
+ journaltitle = {Journal of Infection Prevention},
+ shortjournal = {Journal of Infection Prevention},
+ volume = {14},
+ number = {2},
+ pages = {65--68},
+ publisher = {{SAGE Publications}},
+ issn = {1757-1774},
+ doi = {10.1177/1757177413475903},
+ url = {https://doi.org/10.1177/1757177413475903},
+ urldate = {2024-02-22},
+ abstract = {The use of mobile phones in the clinical environment by healthcare workers has become widespread. Despite evidence that these devices can harbour pathogenic micro-organisms there is little guidance on how to reduce contamination. Recently touchscreen phones with a single flat surface have been introduced. We hypothesise that bacterial contamination of phones used in hospitals will be lower on touchscreen devices compared to keypad devices. Sixty seven mobile phones belonging to health care workers were sampled. The median colony count for touchscreen phones and keypad devices was 0·09 colony forming units (cfu)/cm2 (interquartile range (IQR) 0.05–0·14) and 0·77 cfu/cm2 (IQR range 0·45–3.52) respectively. Colony counts were significantly higher on the keypad phones (Fisher’s exact test p{$<$}0.001). Multivariate analysis showed the type of phone (keypad vs. touch screen) was associated with increased colony counts (F-statistic 14.13: p{$<$}0.001). Overall, nine (13\%) phones grew either meticillin resistant Staphylococcus aureus or vancomycin resistant enterococci. Eight (24\%) keypad phones were contaminated with these organisms compared with one touch screen phone (3\%). Our data indicate that touchscreen mobile phones are less contaminated than their keypad counterparts, and they are less likely to harbour pathogenic bacteria in the clinical setting.},
+ langid = {english},
+ file = {/Users/fabian/Zotero/storage/44QLMR8K/Pal et al_2013_Keypad mobile phones are associated with a significant increased risk of.pdf}
+}
+
+@online{Puro,
+ title = {Puro},
+ url = {https://puro.dev/},
+ urldate = {2024-02-20},
+ abstract = {A comments widget built on GitHub Discussions.},
+ langid = {english},
+ file = {/Users/fabian/Zotero/storage/GEQ4Q3EP/widget.html}
+}
+
@online{ReactiveManifesto,
title = {The {{Reactive Manifesto}}},
url = {https://www.reactivemanifesto.org/},
@@ -53,6 +327,32 @@
file = {/Users/fabian/Zotero/storage/FJSMEDYJ/www.reactivemanifesto.org.html}
}
+@online{ReleaseV0Rev,
+ title = {Release v0.0.6: {{Rev}} Alpha Branch Version to 0.0.6, Flutter 0.0.26 (\#10010) · Flutter/Flutter},
+ shorttitle = {Release v0.0.6},
+ url = {https://github.com/flutter/flutter/releases/tag/v0.0.6},
+ urldate = {2024-02-18},
+ abstract = {VERSION: 0.0.6 flutter: 0.0.26 flutter\_driver: 0.0.4 flutter\_test: 0.0.4},
+ langid = {english},
+ organization = {{GitHub}},
+ file = {/Users/fabian/Zotero/storage/DJJMSGJK/v0.0.html}
+}
+
+@online{richardstallmanWhyGNULinux,
+ title = {Why {{GNU}}/{{Linux}}?},
+ author = {{Richard Stallman}},
+ url = {https://www.gnu.org/gnu/why-gnu-linux.en.html},
+ urldate = {2024-02-19},
+ file = {/Users/fabian/Zotero/storage/4YEIHLEH/why-gnu-linux.en.html}
+}
+
+@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},
+ urldate = {2024-02-23},
+ file = {/Users/fabian/Zotero/storage/QWUKGL4U/39123.html}
+}
+
@online{Skia,
title = {Skia},
url = {https://skia.org/},
@@ -63,6 +363,17 @@
file = {/Users/fabian/Zotero/storage/NV4BSHXY/skia.org.html}
}
+@online{theflutterauthorsEngineShellPlatform,
+ title = {Engine/Shell/Platform/Embedder/Embedder.h at 436f9707b94774d1d049c04b8cda9d81d85aa4a8 · Flutter/Engine},
+ author = {{The Flutter Authors}},
+ url = {https://github.com/flutter/engine/blob/436f9707b94774d1d049c04b8cda9d81d85aa4a8/shell/platform/embedder/embedder.h},
+ urldate = {2024-02-22},
+ abstract = {The Flutter engine. Contribute to flutter/engine development by creating an account on GitHub.},
+ langid = {english},
+ organization = {{GitHub}},
+ file = {/Users/fabian/Zotero/storage/SQZ53EIM/embedder.html}
+}
+
@video{theflutterwayFlutterRubberDuck2022,
entrysubtype = {video},
title = {Before {{Flutter}} | {{Rubber Duck Engineering}} | {{Episode}} \#100},
@@ -74,6 +385,19 @@
abstract = {Tonight we'll talk about the years leading up to Flutter and how Adam and I worked on a variety of projects for the web which inspired what Flutter would become, including at least 3 frameworks in JS, how we briefly thought "shake to reload" was our killer feature, how for more than the first 6 months of the project Flutter was DOM-based and network loaded and much more. Gonna be amazing. Slides: https://docs.google.com/presentation/...}
}
+@online{valleyWhatLinuxOverview2020,
+ title = {What {{Is Linux}}: {{An Overview}} of the {{Linux Operating System}}},
+ shorttitle = {What {{Is Linux}}},
+ author = {family=valley, given=The, prefix=info, useprefix=false},
+ date = {2020-04-11T14:46:55},
+ url = {https://medium.com/@theinfovalley097/what-is-linux-an-overview-of-the-linux-operating-system-77bc7421c7e5},
+ urldate = {2024-02-19},
+ abstract = {What is Linux: An Overview of the Linux Operating System},
+ langid = {english},
+ organization = {{Medium}},
+ file = {/Users/fabian/Zotero/storage/L97SMPU5/what-is-linux-an-overview-of-the-linux-operating-system-77bc7421c7e5.html}
+}
+
@article{weiserComputer21stCentury1999,
title = {The Computer for the 21st Century},
author = {Weiser, Mark},
@@ -91,6 +415,13 @@
file = {/Users/fabian/Zotero/storage/8CCSE83J/Weiser - 1999 - The computer for the 21st century.pdf}
}
+@online{WhatWouldYou,
+ title = {What Would You like to See Most in Minix?},
+ url = {https://groups.google.com/g/comp.os.minix/c/dlNtH7RRrGA/m/SwRavCzVE7gJ},
+ urldate = {2024-02-19},
+ file = {/Users/fabian/Zotero/storage/6TCWJW3N/SwRavCzVE7gJ.html}
+}
+
@online{WorkingJSONFlutter2021,
title = {Working with {{JSON}} in {{Flutter While Using}} Json\_annotations and Json\_serializable {{Modules}} in 2022 | {{John Maeda}}’s {{Blog}}},
date = {2021-06-22},
@@ -101,3 +432,9 @@
organization = {{https://maeda.pm/}},
file = {/Users/fabian/Zotero/storage/ND8L5RU6/working-with-json-in-flutter-while-using-json_annotations-and-json_serializable-modules-in-2022.html}
}
+
+@online{zotero-649,
+ url = {https://tagesschau.api.bund.dev/openapi.yaml},
+ urldate = {2024-03-03},
+ file = {/Users/fabian/Zotero/storage/MBRFKF6W/openapi.html}
+}
diff --git a/Makefile b/Makefile
index 4fd4e95..22edeb7 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,4 @@
-SHELL:=/bin/bash
-MARKDOWN_FILES := $(shell find chapters -type f -name "*.md" | sort | tr '\n' ' ')
-BACHELOR_TEXT := @cat $(MARKDOWN_FILES)
+export MERMAID_FILTER_FORMAT:=pdf
all: local
@@ -11,11 +9,15 @@ help:
dir:
mkdir -p out
+tmp:
+ cat $$(find chapters -type f -name "*.md" | sort) | grep -vw '' > /tmp/bachelor-build
+
+
bachelor: @cat $(MARKDOWN_FILES)
-local: dir
+local: dir tmp
@echo "Building paper"
- MERMAID_FILTER_FORMAT=pdf pandoc -V colorlinks=true -V linkcolor=black -V urlcolor=black -f 'markdown+autolink_bare_uris' --pdf-engine=lualatex --pdf-engine-opt=-shell-escape --filter mermaid-filter --lua-filter columns.lua --citeproc -s $(MARKDOWN_FILES) -o ./out/bachelor.pdf -V lang=de-DE -V fontsize=11pt --highlight-style tango --reference-links --bibliography Bachelor.bib --csl=harvard-right.csl -M lang:de --number-sections
+ pandoc -f markdown+implicit_figures --strip-comments --listings -V colorlinks=true -V linkcolor=black -V urlcolor=black -f 'markdown+autolink_bare_uris' --pdf-engine=lualatex --pdf-engine-opt=-shell-escape --filter mermaid-filter --filter py-pandoc-include-code --lua-filter columns.lua --citeproc -s /tmp/bachelor-build -o ./out/bachelor.pdf -V lang=de-DE -V fontsize=12pt --reference-links --bibliography Bachelor.bib --csl=harvard-right.csl -M lang:de --number-sections -Vindent=false
clean:
rm -rf out
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..c458182
--- /dev/null
+++ b/README.md
@@ -0,0 +1,3 @@
+# Flutter als Entwicklungsplattform für eingebettete Linux Systeme
+
+## Eine Fallstudie
diff --git a/assets/flutter/archdiagram.png b/assets/flutter/archdiagram.png
new file mode 100644
index 0000000..148cf7b
Binary files /dev/null and b/assets/flutter/archdiagram.png differ
diff --git a/assets/mermaid/Caption.pdf b/assets/mermaid/Caption.pdf
new file mode 100644
index 0000000..94ea1e4
Binary files /dev/null and b/assets/mermaid/Caption.pdf differ
diff --git a/assets/mermaid/Caption.png b/assets/mermaid/Caption.png
new file mode 100644
index 0000000..97d8f40
Binary files /dev/null and b/assets/mermaid/Caption.png differ
diff --git a/chapters/.DS_Store b/chapters/.DS_Store
index 8c655af..2299f62 100644
Binary files a/chapters/.DS_Store and b/chapters/.DS_Store differ
diff --git a/chapters/00_pandoc/00_pandoc.md b/chapters/00_pandoc/00_pandoc.md
index 2bf7b0c..ccd2fbe 100644
--- a/chapters/00_pandoc/00_pandoc.md
+++ b/chapters/00_pandoc/00_pandoc.md
@@ -1,55 +1,57 @@
---
header-includes: |
- \usepackage[T1]{fontenc}
- \usepackage[usefilenames,RMstyle={Text,Semibold},SSstyle={Text,Semibold},TTstyle={Text,Semibold},DefaultFeatures={Ligatures=Common}]{plex-otf}
- \usepackage[a4paper,bindingoffset=0.2in,%
- left=4cm,right=2cm,top=2cm,bottom=2cm,%
- footskip=.25in]{geometry}
- \usepackage{fancyhdr}
- \usepackage[utf8]{inputenc}
- \usepackage{tikz}
- \usetikzlibrary{snakes,arrows,shapes}
- \usepackage{amsmath}
- \usepackage{pgfplots}
- \usepackage{pgfplotstable}
- \pgfplotsset{compat=1.8}
- \usepackage{multicol,lipsum}
- \usepackage{listings}
- \usepackage{wrapfig}
- \usepackage[font=small,labelfont=bf]{caption}
- \usepackage{graphicx}
- \usepackage{xcolor,stackengine}
- \usepackage{colortbl}
- \usepackage{tcolorbox}
- \usepackage{lastpage}
- \usepackage{subcaption}
- \usepackage{tabularx}
- \usepackage{biblatex}
- \usepackage{float}
- \usepackage{refract}
- \usepackage{svg}
- \usepackage{setspace}
- \usepackage{titling}
+ \usepackage[T1]{fontenc}
+ \usepackage[a4paper,bindingoffset=0in,left=4cm,right=2cm,top=2cm,bottom=2cm,footskip=.25in]{geometry}
+ \usepackage{fancyhdr}
+ \usepackage[utf8]{inputenc}
+ \usepackage{tikz}
+ \usetikzlibrary{snakes,arrows,shapes}
+ \usepackage{amsmath}
+ \usepackage{pgfplots}
+ \usepackage{pgfplotstable}
+ \pgfplotsset{compat=1.8}
+ \usepackage{multicol,lipsum}
+ \usepackage{listings}
+ \usepackage{wrapfig}
+ \usepackage[font=small,labelfont=bf,tableposition=top, position=above]{caption}
+ \usepackage{graphicx}
+ \usepackage{xcolor,stackengine}
+ \usepackage{colortbl}
+ \usepackage{tcolorbox}
+ \usepackage{lastpage}
+ \usepackage{subcaption}
+ \usepackage{tabularx}
+ \usepackage{biblatex}
+ \usepackage{float}
+ \usepackage{refract}
+ \usepackage{svg}
+ \usepackage{setspace}
+ \usepackage{titling}
+ \usepackage{abstract}
\usepackage{fvextra}
\usepackage{emoji}
+ \usepackage{fontspec}
+ \usepackage{dirtree}
+ \usepackage{etoolbox}
+ \setmainfont{Times New Roman}
\DefineVerbatimEnvironment{Highlighting}{Verbatim}{breaklines,commandchars=\\\{\}}
- \newcommand{\hideFromPandoc}[1]{#1}
- \hideFromPandoc{
- \let\Begin\begin
- \let\End\end
- }
- \makeatletter
- \def\fps@figure{h}
- \makeatother
-nocite: |
- @*
+ \newcommand{\hideFromPandoc}[1]{#1}
+ \hideFromPandoc{
+ \let\Begin\begin
+ \let\End\end
+ }
+ \makeatletter
+ \def\fps@figure{h}
+ \makeatother
---
+\captionsetup[figure]{position=above}
+
\setstretch{1.5}
\setemojifont{Twemoji Mozilla}
-\renewcommand{\familydefault}{\sfdefault}
+
\graphicspath{ {./img/} }
@@ -59,6 +61,8 @@ nocite: |
\renewcommand{\comment}[1]{\hspace{2em}{\small\textit{#1}}\bigskip\par}
+\renewcommand{\lstlistingname}{Auflistung}
+
\newcommand\palbox[1]{{\sffamily\fboxsep=5pt\relax\fboxrule=1pt\relax\footnotesize%
\fcolorbox{gray!50}{gray!10}{%
\stackengine{4pt}{%
@@ -77,3 +81,8 @@ frame=single,
breaklines=true,
postbreak=\mbox{\textcolor{red}{$\hookrightarrow$}\space},
}
+
+\apptocmd{\dirtree}{\bigskip}{}{}
+\pretocmd{\dirtree}{\bigskip}{}{}
+
+\newcommand{\mkbibnodate}{n\adddot d\adddot}
diff --git a/chapters/00_pandoc/01_dart.md b/chapters/00_pandoc/01_dart.md
new file mode 100644
index 0000000..b6d3d8c
--- /dev/null
+++ b/chapters/00_pandoc/01_dart.md
@@ -0,0 +1,31 @@
+\definecolor{codegreen}{rgb}{0,0.6,0}
+\definecolor{codegray}{rgb}{0.5,0.5,0.5}
+\definecolor{codepurple}{rgb}{0.58,0,0.82}
+\definecolor{backcolour}{rgb}{0.95, 0.95, 0.96}
+
+\lstset{
+backgroundcolor=\color{backcolour},
+ commentstyle=\color{codegreen},
+keywordstyle=\color{magenta},
+numberstyle=\tiny\color{codegray},
+stringstyle=\color{codepurple},
+basicstyle=\ttfamily\footnotesize,
+breakatwhitespace=false,
+ breaklines=true,
+ captionpos=b,
+ keepspaces=true,
+ numbers=left,
+ numbersep=5pt,
+ showspaces=false,
+ showstringspaces=false,
+showtabs=false,
+ tabsize=2,
+morestring=\*[d]{"}
+}
+
+\lstset{
+emph=[1]{var, String, int, List, void, Future, await, if, else, throw, async, true, false},
+emphstyle=[1]{\color{codepurple}},
+emph=[2]{findAllElements,findElements, setState, send, fromPath, add, parse, bytesToString},
+emphstyle=[2]{\color{magenta}}
+}
diff --git a/chapters/01_titel/00_titlepage.md b/chapters/01_titel/00_titlepage.md
index feacd26..4642fdd 100644
--- a/chapters/01_titel/00_titlepage.md
+++ b/chapters/01_titel/00_titlepage.md
@@ -2,31 +2,39 @@
\begin{titlepage}
\begin{center}
-\Large Hochschule Rhein-Waal \\
-\vspace{2.5cm}
-\Large Proposal für die Bachelorarbeit \\
-\vspace{2.5cm}
-\huge \textbf{\textsc{Flutter als Entwicklungsplattform für eingebettete Linux Systeme: eine Fallstudie}} \\
-\vspace{1.0cm}
-\Large Fabian Baldeau \\
-\vspace{2.5cm}
-\vspace{0.25cm}
-\textsc{Studiengang}\\
-\vspace{0.25cm}
-\textsc{Medieninformatik}\\
-\vspace{2.5cm}
-\textsc{Gutachter}\\
-\vspace{0.25cm}
-\textsc{Prof. Dr.-Ing. Ido Iurgel}\\
-\vspace{0.25cm}
-\textsc{Prof. Dr. Kai Essig}\\
+Hochschule Rhein-Waal \\
+Fakultät Kommunikation und Umwelt \\
+Prof Dr.-Ing. Ido Iurgel \\
+Prof Dr. Kai Essig \\
+\vspace{3cm}
+\Large \textbf{\textsc{Flutter als Entwicklungsplattform für eingebettete Linux Systeme: eine Fallstudie}} \\
+\vspace{2.0cm}
+\normalsize Bachelorarbeit \\
+im Studiengang \\
+Medieninformatik \\
+Zur Erlangung des akademischen Grades \\
+\vspace{2.0cm}
+Bachelor of Science \\
+\vspace{2.0cm}
+vorgelegt von\\
+Fabian Baldeau \\
+\vspace{1.5cm}
+Matrikelnummer: \\
+27516 \\
+\vspace{1.5cm}
+Abgabedatum: \\
+xx. xxxx 2024 \\
\vspace{2cm}
\end{center}
\end{titlepage}
-\pagenumbering{Roman}
+\pagenumbering{roman}
\fancyhf{}
-\fancyhead[C]{\thepage}
+
+
+
+\fancyhead[C]{}
+\fancyfoot[R]{\thepage}
\renewcommand{\headrulewidth}{0pt}
\pagestyle{fancy}
diff --git a/chapters/01_titel/01_abstract.md b/chapters/01_titel/01_abstract.md
index e69de29..5c19f4e 100644
--- a/chapters/01_titel/01_abstract.md
+++ b/chapters/01_titel/01_abstract.md
@@ -0,0 +1,27 @@
+\addtocounter{page}{1}
+
+\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
+diesem Kontext durch eine Fallstudie: die Entwicklung
+eines Flutter App Prototyps auf einem Raspberry
+Pi mit einer angepassten eingebetteten Linux Distribution.
+Leistungsmesswerte, Benutzerfreundlichkeit und der
+Entwicklungsprozess werden bewertet. 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 werden, 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. Die Ergebnisse der Untersuchung
+zeigen ein großes Potential für die Nutzung von Flutter in eingebetteten
+Linux Systemen.
+\end{abstract}
diff --git a/chapters/01_titel/02_toc.md b/chapters/01_titel/02_toc.md
index b4245c6..4efd4db 100644
--- a/chapters/01_titel/02_toc.md
+++ b/chapters/01_titel/02_toc.md
@@ -1,6 +1,16 @@
+\pagebreak
\tableofcontents
\pagebreak
+\listoffigures
+
+\pagebreak
+
+\renewcommand\lstlistlistingname{Auflistungsverzeichnis}
+\lstlistoflistings
+
+\pagebreak
+
+
+
+# Einleitung
+
+## Motivation
+
+Die Entwicklung moderner und ansprechender Benutzeroberflächen (GUIs) für eingebettete
+Linux-Systeme ist eine Herausforderung. Herkömmliche GUI-Toolkits stoßen häufig an
+ihre Grenzen, wenn es um die Erfüllung der Anforderungen an Leistung,
+plattformübergreifende Kompatibilität und Design geht. Flutter [@googleinc.FutterBuildAny],
+ein quelloffenes Benutzerschnittstellen-Entwicklungs-Kit von Google,
+stellt eine vielversprechende Alternative dar. Es zeichnet sich durch native Kompilierung
+für hohe Performance und geringen Ressourcenverbrauch, eine flexible Architektur,
+die an verschiedene Plattformen angepasst werden kann, und seinen Fokus auf moderne
+und intuitive Benutzeroberflächen aus.
+
+## Relevanz
+
+In dieser Arbeit wird der Einsatz von Flutter für die Entwicklung von GUIs für
+eingebettete Linux-Systeme untersucht. Die Arbeit leistet einen wichtigen Beitrag
+zu diesem Forschungsbereich, indem sie:
+
+- die Leistungsmerkmale von Flutter auf eingebetteter Hardware detailliert untersucht
+ und wertvolle Hinweise für die Auswahl des richtigen Toolkits liefert.
+- den Entwicklungsprozess detailliert beschreibt und Herausforderungen sowie
+ bewährte Praktiken bei der Verwendung von Flutter in einem eingebetteten Linux-Kontext aufzeigt.
+- eine reale eingebettete GUI mit Flutter implementiert und dabei die Fähigkeiten und
+ potenziellen Anwendungsfälle des Toolkits hervorhebt.
+
+Die Ergebnisse dieser Arbeit sind relevant für Entwickler
+im Bereich eingebetteter Systeme, die moderne,
+performante und ansprechende GUIs für Linux-basierte Geräte entwickeln möchten.
+
+## Zielsetzung
+
+Ziel der Arbeit ist es, die Potenziale und Herausforderungen von
+Flutter im Bereich der GUI-Entwicklung für eingebettete Linux-Systeme
+zu beleuchten und Entwicklern wertvolle Hinweise für die Auswahl des
+richtigen Toolkits zu liefern.
+
+## Problemstellung
+
+Beantwortet werden soll die Frage, inwieweit sich Flutter für die Entwicklung von GUIs
+für eingebettete Linux-Systeme eignet. Dazu wird in dieser Arbeit geklärt:
+Wie einfach und effizient ist die Entwicklung und Wartung von GUIs mit Flutter?
+Welche Auswirkungen hat Flutter auf die Performance und den Ressourcenverbrauch im
+eingebetteten Kontext? Wie hoch ist der Lernaufwand für Entwickler? Welche Community
+und Support-Ressourcen stehen für Flutter-Entwickler zur Verfügung? Um diese Fragen
+zu beantworten wird die folgende Methodik angewendet.
+
+## Methodik
+
+Um die Forschungsfrage zu beantworten, wird eine Literaturrecherche,
+eine experimentelle Untersuchung und eine Auswertung der Untersuchung durchgeführt.
+In der Literaturrecherche werden aktuelle wissenschaftliche Quellen zu GUI-Entwicklung
+für eingebettete Systeme und Flutter ausgewertet. Die experimentelle Untersuchung
+umfasst die Implementierung einer realen eingebetteten GUI mit Flutter und die
+Bewertung der Performance, des Ressourcenverbrauchs und der Benutzerfreundlichkeit
+der GUI. Die Ergebnisse der Literaturrecherche und der experimentellen Untersuchung
+werden in einem Bewertungsschema zusammengefasst und abschließend bewertet. Basierend
+auf den Ergebnissen wird ein Leitfaden für die Entwicklung von GUIs für eingebettete
+Linux-Systeme mit Flutter erstellt.
+
+## Struktur der Arbeit
+
+Zu ergänzen wenn Arbeit fertig ist...
+
+## Problematik
+
+Zu ergänzen falls nötig...
diff --git a/chapters/02_einleitung/01_zielsetzung.md b/chapters/02_einleitung/01_zielsetzung.md
index e69de29..ccc272c 100644
--- a/chapters/02_einleitung/01_zielsetzung.md
+++ b/chapters/02_einleitung/01_zielsetzung.md
@@ -0,0 +1,12 @@
+
+
+
diff --git a/chapters/03_grundlagen/01_eLinux.md b/chapters/03_grundlagen/01_eLinux.md
deleted file mode 100644
index 78c67b4..0000000
--- a/chapters/03_grundlagen/01_eLinux.md
+++ /dev/null
@@ -1,18 +0,0 @@
-
diff --git a/chapters/03_grundlagen/01_linux.md b/chapters/03_grundlagen/01_linux.md
new file mode 100644
index 0000000..c56bdf4
--- /dev/null
+++ b/chapters/03_grundlagen/01_linux.md
@@ -0,0 +1,172 @@
+
+
+\pagebreak
+
+# Grundlagen
+
+## Eingebettete Systeme
+
+Traditionelle Ansichten über Computer beschreiben sie oft als
+eigenständige Geräte wie Desktops oder Laptops. Im Gegensatz dazu
+skizzierte Mark Weiser in seinem einflussreichen Paper
+"The Computer of the 21st Century" 1999 eine Vision des "Ubiquitous Computing". [@weiserComputer21stCentury1999]
+Diese Vision beschreibt eine Welt, in der nahtlos integrierte Geräte in unserem
+Leben "verschwinden". Eingebettete Systeme verkörpern heute diese Philosophie.
+Sie sind keine Allzweckcomputer, sondern spezialisierte Computer, die
+in Geräten und Systemen eingebettet sind. Sie sind in der Regel auf eine
+spezielle Aufgabe oder Funktion zugeschnitten und sind oft in
+Geräten des täglichen Lebens zu finden.
+
+Beispiele für eingebettete Systeme finden sich in allen Lebensbereichen:
+
+- **Automobilindustrie**: Infotainment System
+- **Industrie**: Automatisierungssysteme, Steuerung von Maschinen
+- **Medizintechnik**: Medizinische Geräte, Diagnosegeräte
+- **Haushaltsgeräte**: Waschmaschinen, Kühlschränke
+- **Consumer Electronics**: Smartphones, Smartwatches
+
+Eingebettete Systeme sind oft auf Echtzeitfähigkeit, Energieeffizienz
+und Zuverlässigkeit ausgelegt. Sie sind in der Regel nicht so leistungsfähig
+wie Desktop- oder Server-Computer, aber sie sind in der Lage, spezialisierte
+Aufgaben zu erfüllen.
+
+Auch Experten fällt eine klare Definition von eingebetteten Systemen
+in der heutigen Zeit nicht leicht, wie auch Jack Ganssle, ein
+Experte für eingebettete Systeme mit über 30 Jahre Berufserfahrung,
+in einem Blog Beitrag schreibt. [@ganssleWhatEmbedded2008]
+So konnte man laut Ganssle früher Systeme, die mit einem Mikrocontroller oder
+Mikroprozessor ausgestattet sind und in einem Gerät eingebettet sind,
+klar als eingebettete Systeme bezeichnen.
+Doch heutzutage werden oft auch Systeme, die mit einem vollwertigen
+Betriebssystem ausgestattet sind, als eingebettete Systeme bezeichnet.
+Dazu gehört das Linux Betriebssystem, welches in vielen eingebetteten
+Systemen zum Einsatz kommt und auch Windows ist laut Ganssle in
+eingebetteten Systemen anzutreffen. Als weiteres Beispiel dazu
+nennt er das Handy, welches als es nur zum telefonieren genutzt wurde
+klar als eingebettetes System bezeichnet werden konnte, doch heutzutage
+ist es ein vollwertiger Computer, der auch als solcher
+für eine Vielzahl von anderen Funktionen genutzt werden kann.
+
+\pagebreak
+
+In weiterer Literatur zu eingebetteten Systemen finden sich
+die folgenden Definitionen:
+
+> "An embedded system is a microprocessor based system that is
+> built to control a function or a range of functions." [@heathEmbeddedSystemsDesign2002]
+
+> "Embedded systems are information processing systems embedded into enclosing products."
+> [@marwedelEmbeddedSystemDesign2021]
+
+Auch aus diesen Definitionen geht hervor, dass die Definition von eingebetteten
+Systemen nicht eindeutig ist. Da es sowohl eine Funktion oder eine Reihe von
+Funktionen steuern kann, als auch speziell ein System ist, das in ein Produkt
+eingebettet ist.
+
+Ein eingebettetes System ist also meistens ein Computersystem, das spezialisiert
+ist auf eine bestimmte Funktion oder Aufgabe. Mittlerweile heißt das jedoch auch,
+dass es sich oft um Systeme handelt, welche eigentlich vollwertige Computer sind und
+daher viele Funktionen ausführen könnten, doch der Hersteller oder Entwickler das
+System auf gezielte Funktionen beschränkt. So würde ein Bankautomat mit eingebetteten Linux
+nur auf die speziellen Aufgaben beschränkt werden, welche ein Bankautomat zu erfüllen hat, obwohl er
+eigentlich ein vollwertiger Computer sein könnte und viele weitere Funktionen ausführen könnte.
+Besonders bei eingebetteten Systemen mit Touchscreens könnte eine schier unendliche Anzahl von
+Funktionen auf dem Display angezeigt und angesteuert werden. Daher kommt die Definition
+eines eingebetteten Systems auch auf die Definition des Systems vom Hersteller oder Entwickler an.
+
+
+
+## Linux
+
+Linux ist die Bezeichnung für ein freies und quelloffenes Betriebssystem,
+das auf dem Linux-Kernel und dem GNU-Betriebssystem basiert. Hinter der
+Bezeichnung GNU steht das GNU-Projekt, das 1983 von Richard Stallman
+ins Leben gerufen wurde. Das GNU-Projekt hat das Ziel, ein vollständig
+freies Betriebssystem zu entwickeln, das auf freier Software basiert.
+Im allgemeinen Sprachgebrauch wird Linux oft als Bezeichnung für das
+gesamte Betriebssystem genutzt, obwohl es sich eigentlich um das
+Betriebssystem GNU/Linux handelt. Richard Stallman, der Gründer des
+GNU-Projekts und der Free Software Foundation, erläutert in einem
+Blog-Beitrag, dass es wichtig wäre, GNU zu erwähnen, da es viele
+der Kernkomponenten des Betriebssystems zusammen mit dem Linux-Kernel
+bildet und dass die Bezeichnung GNU/Linux diesen wichtigen Beitrag
+anerkennt. Zudem würde es dabei helfen, die Idee des GNU-Projekts
+und der Free Software Foundation zu verbreiten. [@richardstallmanWhyGNULinux]
+
+In der Arbeit wird die Bezeichnung "Linux" für das Betriebssystem
+verwendet, da es sich um die allgemein gebräuchliche Bezeichnung
+handelt und die Bezeichnung "GNU/Linux" in der Literatur und im
+allgemeinen Sprachgebrauch nicht so verbreitet ist. Besonders im
+eingebetteten Bereich wird es allgemein als "Eingebettetes Linux"
+bezeichnet und nicht als "Eingebettetes GNU/Linux".
+
+Linux gehört zu den weltweit am weitesten verbreiteten Betriebssystemen
+und zählt zur Gruppe von "unixoide" oder unix-ähnlichen Betriebssystemen,
+da es Konzepte des 1969 von Bell Laboratories entwickelten Betriebssystems
+Unix aufgreift.
+
+Nutzer von Linux verwendet oft eine sogenannte "Distribution" von Linux
+wie Ubuntu. Eine Linux-Distribution, auch als Distro bezeichnet, ist ein vollständiges
+Betriebssystem, das auf dem Linux-Kernel aufbaut. Der Kernel ist das
+Herzstück des Betriebssystems. Zusätzlich zum Kernel gibt es weitere
+wichtige Bestandteile einer Distro, wie Systembibliotheken, Dienstprogramme
+und Softwareanwendungen. Die Auswahl dieser wird vom Ersteller der Distro
+getroffen. Distros gibt es in vielen Varianten, jede mit ihren eigenen
+Zielen, Zielgruppen und Softwareauswahl. Das bedeutet, dass es für viele
+verschiedene Anwendungsfälle eine passende Distro gibt. [@dikkyryanpratamaWhatLinuxDistribution]
+
+### Eingebettetes Linux
+
+Unter eingebetteten Linux versteht man die Nutzung des
+Linux-Betriebssystems im Umfeld eingebetteter Systeme. Der
+einzige wesentliche Unterschied zu dem normalen Linux-Betriebssystem
+ist dabei, dass das System auf die speziellen Anforderungen
+eingebetteter Systeme zugeschnitten ist und vor allem
+sparsamer mit den Ressourcen umgeht. Es hält jedoch nichts davon ab,
+jede Art von Linux-Distribution auf einem eingebetteten System zu
+installieren und als "eingebettetes Linux" zu betreiben. Um jedoch
+das volle Potenzial eines eingebetteten Systems auszuschöpfen, ist
+es ratsam, eine speziell für eingebettete Systeme entwickelte
+Linux-Distribution zu verwenden. Yocto ist ein Projekt mit
+dem eine solche spezielle Distribution für eingebettete Systeme
+erstellt werden kann.
+
+### Das Yocto Projekt
+
+Yocto ist ein Open-Source-Projekt der Linux Foundation, das es ermöglicht,
+maßgeschneiderte Linux-Distributionen für eingebettete Systeme
+zu erstellen. Es bietet hierzu eine Sammlung von Tools, Vorlagen und
+Methoden, die vor allem auf die Prinzipien der quellbasierten
+Linux-Distribution Gentoo basieren. Eine quellbasierte Distribution
+ist eine Linux-Distribution, die aus den Quellcodes der Software
+zusammengestellt wird. Das bedeutet, dass die Software auf dem
+Zielgerät aus den Quellcodes kompiliert wird und nicht aus
+vorkompilierten Binärdateien installiert wird. Dies ermöglicht
+eine hohe Flexibilität und Anpassbarkeit der Distribution und
+Software. Yocto erweitert dieses Prinzip speziell auf eingebettete
+Systeme. Es ist keine fertige Distribution, sondern ein Framework,
+mit dem eigene Distributionen speziell für eingebettete Systeme erstellt werden können.
+[@linuxfoundationYoctoProject162024]
diff --git a/chapters/03_grundlagen/02_flutter.md b/chapters/03_grundlagen/02_flutter.md
new file mode 100644
index 0000000..0fe49ae
--- /dev/null
+++ b/chapters/03_grundlagen/02_flutter.md
@@ -0,0 +1,127 @@
+
+
+
+
+## Flutter
+
+Flutter ist ein von Google entwickeltes
+quelloffenes Benutzerschnittstellen-Entwicklungs-Kit,
+welches die effiziente Entwicklung ansprechender
+Benutzeroberflächen für mobile, Web- und
+Desktop-Anwendungen ermöglichen soll. Es wurde
+2017 von Google veröffentlicht und ist
+BSD-lizenziert [@3ClauseBSDLicense2011].
+
+Die zunehmende Verbreitung mobiler Geräte und Betriebssysteme
+stellt die effiziente Anwendungsentwicklung vor Herausforderungen.
+Plattformübergreifende Frameworks wie Flutter zielen darauf ab,
+diese Herausforderungen zu mildern, indem sie ein einheitliches
+Toolset zum Erstellen von Benutzeroberflächen (GUIs) bereitstellen,
+die nahtlos über verschiedene Plattformen hinweg funktionieren.
+Dieses Kapitel befasst sich mit der grundlegenden Architektur
+von Flutter.
+
+### Flutters Architektur
+
+Flutter verwendet eine modulare, geschichtete Architektur. Dieses
+Design besteht aus unabhängigen Bibliotheken, die jeweils von der
+darunter liegenden Schicht abhängig sind, was lose Kopplung und
+Flexibilität gewährleistet. Dieser Ansatz fördert die Anpassbarkeit
+und die Möglichkeit, Framework-Komponenten nach Bedarf zu ersetzen. [@FlutterArchitecturalOverviewb]
+
+Die folgende Abbildung \ref{flutterArch} zeigt die Architektur von Flutter:
+
+\pagebreak
+
+```{=latex}
+\begin{figure}[ht]
+\centering
+\caption{Flutter Architektur}
+\includegraphics[width=9cm]{assets/flutter/archdiagram.png}
+\label{flutterArch}
+
+
+\caption*{
+```
+
+Quelle: @FlutterArchitecturalOverviewb
+
+```{=latex}
+}
+\end{figure}
+```
+
+Das Kernelement von Flutter ist die Engine, die in C/C++ geschrieben
+ist. Sie ist für das Rastern zusammengesetzter Szenen verantwortlich,
+sobald ein neues Bild gezeichnet werden muss. Sie übernimmt alle
+Aufgaben zur Darstellung der Benutzeroberfläche.
+
+Auf der Engine liegt das Flutter-Framework, das in der Programmiersprache
+Dart geschrieben ist. Diese Ebene bietet ein modernes, reaktives Framework,
+das zum Aufbau der Benutzeroberfläche verwendet wird. In der Entwicklung
+von Flutter Anwendungen wird meistens nur diese Flutter-Framework Ebene
+verwendet und die komplette Flutter Anwendung wird meist nur im
+Framework Teil in Dart geschrieben.
+
+Die niedrigste Ebene ist der Embedder, dessen Aufgabe es ist,
+die Rendering-Fläche bereitzustellen, die Eingaben zu verarbeiten
+und Zugriff zu Dart Anwendungs-Snapshots zu ermöglichen. [@gardeFlutterRaspberryPi2018]
+Die Flutter Engine hat hierzu eine C API, welche in einer einzelnen
+C Header-Datei definiert ist. [@theflutterauthorsEngineShellPlatform] Diese API Punkte müssen von dem
+Embedder angesprochen werden.
+
+
+
+### Deklarative Programmierung in Flutter
+
+Deklarative Programmierung ist ein Programmierparadigma, bei dem
+der Programmierer den gewünschten Endzustand der Anwendung
+beschreibt, anstatt die Schritte zu definieren, die zur Erreichung
+dieses Zustands erforderlich sind. Dieses Paradigma ist in Flutter
+zentral, da es die Entwicklung von Benutzeroberflächen erleichtert.
+Die Benutzeroberfläche wird als Baum von Widgets dargestellt, die
+jeweils den gewünschten Zustand der Benutzeroberfläche beschreiben.
+Wenn sich der Zustand ändert, wird der Baum der Widgets neu
+gerendert, um den neuen Zustand widerzuspiegeln. [@googleinc.IntroductionDeclarativeUI]
+
+\lstinputlisting[language=Java, caption=Beispiel für deklarative Programmierung mit Flutter, linerange={65-73}, captionpos=t]
+{code/flutter_architecture/lib/main.dart}
+
+Wie im Code-Beispiel zu erkennen definiert der Entwickler hier
+ein neues Widget `TextWidget`, welches einen Text als Parameter erhält
+und diesen als Text-Widget mit dem im Parameter übergebenen Text
+zurückgibt. Dieses Widget wird dann in der "build" Methode erstellt.
+An einer gegebenen Stelle im Code kann der Entwickler nun dieses
+`TextWidget` folgendermaßen verwenden:
+
+```{#test .dart .number-lines caption="Nutzung des TextWidgets" captionpos=t}
+TextWidget("Hello World");
+```
+
+Hier wird der Text "Hello World" als Parameter an das `TextWidget`
+übergeben und das Widget wird an der beliebigen Stelle in der Anwendung
+angezeigt wo es so eingesetzt wurde. Wenn nun aber eine dynamische
+Variable an den Text übergeben werden soll, kann dies einfach
+durch die folgende Deklaration geschehen:
+
+```{.dart .number-lines caption="Nutzung des TextWidgets mit dynamischer Variable" captionpos=t}
+String text = "Hello World";
+TextWidget(text);
+```
+
+Falls nun die Variable `text` sich ändert, wird das `TextWidget`
+automatisch neu gerendert und der neue Text wird angezeigt.
+Der Entwickler muss sich also nicht darum kümmern, dass das Widget
+neu gerendert wird, das ist deklarative Programmierung in Flutter.
+Das Framework übernimmt das für den Entwickler automatisch.
diff --git a/chapters/03_grundlagen/03_i2c_bus.md b/chapters/03_grundlagen/03_i2c_bus.md
deleted file mode 100644
index e69de29..0000000
diff --git a/chapters/03_grundlagen/04_spi_bus.md b/chapters/03_grundlagen/04_spi_bus.md
deleted file mode 100644
index e69de29..0000000
diff --git a/chapters/03_grundlagen/05_yocto_linux.md b/chapters/03_grundlagen/05_yocto_linux.md
deleted file mode 100644
index e7839d7..0000000
--- a/chapters/03_grundlagen/05_yocto_linux.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# Yocto Environment
-
-## Poky
-
-## Metadata
-
-## Open-Embedded Project
-
-## Bitbake
-
-## Board support package
-
-## Meta-Flutter
-
-# Setting up the build environment and building the image
-
-# Flashing the image on Target
diff --git a/chapters/03_grundlagen/06_flutter.md b/chapters/03_grundlagen/06_flutter.md
deleted file mode 100644
index 9517853..0000000
--- a/chapters/03_grundlagen/06_flutter.md
+++ /dev/null
@@ -1,35 +0,0 @@
-
-
-# Flutter
-
-Die zunehmende Verbreitung mobiler Geräte und Betriebssysteme
-stellt die effiziente Anwendungsentwicklung vor Herausforderungen.
-Plattformübergreifende Frameworks wie Flutter zielen darauf ab,
-diese Herausforderungen zu mildern, indem sie ein einheitliches
-Toolset zum Erstellen von Benutzeroberflächen (UIs) bereitstellen,
-die nahtlos über verschiedene Plattformen hinweg funktionieren.
-Dieses Kapitel befasst sich mit der grundlegenden Architektur,
-den Vorteilen und Überlegungen zur Verwendung von Flutter für
-die Anwendungsentwicklung. [@theflutterwayFlutterRubberDuck2022]
-
-Was ist Flutter [@FlutterArchitecturalOverviewb]
-
-test [@weiserComputer21stCentury1999]
-
-```{#test .dart .number-lines caption="Example Dart test"}
-import 'package:retry/retry.dart';
-
-final response = await retry(
- // Make a GET request
- () => http.get('https://google.com').timeout(Duration(seconds: 5)),
- // Retry on SocketException or TimeoutException
- retryIf: (e) => e is SocketException || e is TimeoutException,
-);
-print(response.body);
-```
-
-Nice Dart highlighting!
-
-
-
-WORKING :)
diff --git a/chapters/05_analyse_und_design/00_anforderungen.md b/chapters/05_analyse_und_design/00_anforderungen.md
new file mode 100644
index 0000000..c67a809
--- /dev/null
+++ b/chapters/05_analyse_und_design/00_anforderungen.md
@@ -0,0 +1,13 @@
+\pagebreak
+
+# Analyse und Design
+
+## Anforderungen
+
+### Anwendungseinsatz
+
+### Anwendungsfunktionen
+
+### Abgrenzungskriterien
+
+### Benutzeroberfläche
diff --git a/chapters/05_analyse_und_design/01_architektur.md b/chapters/05_analyse_und_design/01_architektur.md
new file mode 100644
index 0000000..5d31cd9
--- /dev/null
+++ b/chapters/05_analyse_und_design/01_architektur.md
@@ -0,0 +1,29 @@
+## Architektur
+
+### Analyse
+
+### Design
+
+- three-layer architecture [@hajianFlutterEngineering2024, 219]
+
+\begin{figure}[ht]
+\centering
+\begin{minipage}{7cm}
+\dirtree{%
+.1 lib/.
+.2 common.
+.2 constants.
+.2 features.
+.3 benchmark.
+.3 home.
+.3 settings.
+
+.3 system\_information.
+.2 localization.
+}
+\end{minipage}
+\caption{Example caption}
+
+
+\caption*{Quelle: hier Quellangabe}
+\end{figure}
diff --git a/chapters/05_yocto/01_pi_image.md b/chapters/05_yocto/01_pi_image.md
deleted file mode 100644
index e69de29..0000000
diff --git a/chapters/05_yocto/02_meta_flutter.md b/chapters/05_yocto/02_meta_flutter.md
deleted file mode 100644
index e69de29..0000000
diff --git a/chapters/05_yocto/03_network_manager.md b/chapters/05_yocto/03_network_manager.md
deleted file mode 100644
index e69de29..0000000
diff --git a/chapters/05_yocto/04_hot_reload_embedder.md b/chapters/05_yocto/04_hot_reload_embedder.md
deleted file mode 100644
index e69de29..0000000
diff --git a/chapters/05_yocto/05_qemu_linux.md b/chapters/05_yocto/05_qemu_linux.md
deleted file mode 100644
index e69de29..0000000
diff --git a/chapters/06_flutter/.DS_Store b/chapters/06_flutter/.DS_Store
deleted file mode 100644
index dd57921..0000000
Binary files a/chapters/06_flutter/.DS_Store and /dev/null differ
diff --git a/chapters/06_flutter/02_home.md b/chapters/06_flutter/02_home.md
deleted file mode 100644
index e69de29..0000000
diff --git a/chapters/06_flutter/03_material_demo.md b/chapters/06_flutter/03_material_demo.md
deleted file mode 100644
index e69de29..0000000
diff --git a/chapters/06_flutter/04_liste.md b/chapters/06_flutter/04_liste.md
deleted file mode 100644
index e69de29..0000000
diff --git a/chapters/06_flutter/05_kartenansicht.md b/chapters/06_flutter/05_kartenansicht.md
deleted file mode 100644
index e69de29..0000000
diff --git a/chapters/06_flutter/06_einstellungen.md b/chapters/06_flutter/06_einstellungen.md
deleted file mode 100644
index e69de29..0000000
diff --git a/chapters/06_flutter/08_matrix.md b/chapters/06_flutter/08_matrix.md
deleted file mode 100644
index e69de29..0000000
diff --git a/chapters/06_flutter/09_video.md b/chapters/06_flutter/09_video.md
deleted file mode 100644
index e69de29..0000000
diff --git a/chapters/06_flutter/10_flame.md b/chapters/06_flutter/10_flame.md
deleted file mode 100644
index e69de29..0000000
diff --git a/chapters/06_flutter/led.md b/chapters/06_flutter/led.md
deleted file mode 100644
index e69de29..0000000
diff --git a/chapters/05_yocto/.DS_Store b/chapters/06_implementierung/.DS_Store
similarity index 100%
rename from chapters/05_yocto/.DS_Store
rename to chapters/06_implementierung/.DS_Store
diff --git a/chapters/06_implementierung/00_entwicklungsumgebung.md b/chapters/06_implementierung/00_entwicklungsumgebung.md
new file mode 100644
index 0000000..330cc0e
--- /dev/null
+++ b/chapters/06_implementierung/00_entwicklungsumgebung.md
@@ -0,0 +1,76 @@
+# Implementierung
+
+## Grundaufbau
+
+### Entwicklungsumgebung
+
+### Flutter Version Management
+
+Zur Installation von Flutter und Dart empfiehlt
+sich ein Version Manager. Der bekannteste Version
+Manager ist FVM (Flutter Version Management), doch
+der neuere Manager Puro bietet viele Vorteile.
+
+MacOS und Linux
+
+```bash
+curl -o- https://puro.dev/install.sh | PURO_VERSION="1.4.4" bash
+```
+
+Windows
+
+```powershell
+Invoke-WebRequest -Uri "https://puro.dev/builds/1.4.4/windows-x64/puro.exe" -OutFile "$env:temp\puro.exe"; &"$env:temp\puro.exe" install-puro --promote
+```
+
+Puro Optimierungen:
+
+- parallel git clone and engine download
+- global cache for git history
+- global cache for engine versions
+
+With other approaches, each Flutter repository is in its own folder, requiring you to download and store the git history, engine, and framework of each version:
+
+Puro implements a technology similar to GitLab's object deduplication to avoid downloading the same git objects over and over again. It also uses symlinks to share the same engine version between multiple installations:
+
+```bash
+puro use -g stable
+```
+
+```bash
+puro create bachelor_elinux 3.19.0
+```
+
+```bash
+puro use bachelor_elinux
+```
+
+`.puro.json`:
+
+```json
+{
+ "env": "bachelor_elinux"
+}
+```
+
+`.vscode/settings.json`
+
+```json
+{
+ "dart.flutterSdkPath": "/Users/fabian/.puro/envs/bachelor_elinux/flutter",
+ "dart.sdkPath": "/Users/fabian/.puro/envs/bachelor_elinux/flutter/bin/cache/dart-sdk"
+}
+```
+
+```bash
+puro flutter --version
+```
+
+```bash
+Flutter 3.19.0 • channel stable • https://github.com/flutter/flutter.git
+Framework • revision bae5e49bc2 (6 days ago) • 2024-02-13 17:46:18 -0800
+Engine • revision 04817c99c9
+Tools • Dart 3.3.0 • DevTools 2.31.1
+```
+
+## Setup von Raspberry Pi
diff --git a/chapters/06_flutter/01_architecture.md b/chapters/06_implementierung/01_programmierung.md
similarity index 83%
rename from chapters/06_flutter/01_architecture.md
rename to chapters/06_implementierung/01_programmierung.md
index 7666118..2095e32 100644
--- a/chapters/06_flutter/01_architecture.md
+++ b/chapters/06_implementierung/01_programmierung.md
@@ -60,3 +60,18 @@ Caveats
Experimental: Not considered production-ready for every use-case (as might be expected with projects pushing Flutter’s boundaries).
Limited APIs: Compared to mainstream platforms, Flutter’s full suite of plugins and packages might not be compatible without extra platform channel work on your end.
-->
+
+
diff --git a/chapters/07_fazit/.DS_Store b/chapters/07_zusammenfassung_und_ausblick/.DS_Store
similarity index 100%
rename from chapters/07_fazit/.DS_Store
rename to chapters/07_zusammenfassung_und_ausblick/.DS_Store
diff --git a/chapters/07_fazit/01_vergleich.md b/chapters/07_zusammenfassung_und_ausblick/01_vergleich.md
similarity index 100%
rename from chapters/07_fazit/01_vergleich.md
rename to chapters/07_zusammenfassung_und_ausblick/01_vergleich.md
diff --git a/chapters/07_fazit/02_bewertung.md b/chapters/07_zusammenfassung_und_ausblick/02_bewertung.md
similarity index 100%
rename from chapters/07_fazit/02_bewertung.md
rename to chapters/07_zusammenfassung_und_ausblick/02_bewertung.md
diff --git a/chapters/07_fazit/03_zusammenfassung_ausblick.md b/chapters/07_zusammenfassung_und_ausblick/03_zusammenfassung_ausblick.md
similarity index 100%
rename from chapters/07_fazit/03_zusammenfassung_ausblick.md
rename to chapters/07_zusammenfassung_und_ausblick/03_zusammenfassung_ausblick.md
diff --git a/chapters/08_01_references/00_mermaid b/chapters/08_01_references/00_mermaid
new file mode 100644
index 0000000..91a6127
--- /dev/null
+++ b/chapters/08_01_references/00_mermaid
@@ -0,0 +1,23 @@
+```{=latex}
+\begin{center}
+```
+
+```{.mermaid loc=assets/mermaid caption="Caption" #fig:reference-name}
+graph LR
+ A[Flutter] -- Engine --> B((SKIA))
+ A --> C(Facebook)
+ B --> D{Twitter}
+ C --> D
+```
+
+```{=latex}
+\end{center}
+```
+
+\begin{figure}[ht]
+\centering
+\caption{Example caption}
+
+
+\caption*{Quelle: hier Quellangabe}
+\end{figure}
diff --git a/chapters/08_01_references/01_code b/chapters/08_01_references/01_code
new file mode 100644
index 0000000..8738834
--- /dev/null
+++ b/chapters/08_01_references/01_code
@@ -0,0 +1,2 @@
+\lstinputlisting[language=Java, caption=Beispiel öpvn, linerange={65-73}]
+{code/flutter_architecture/lib/main.dart}
diff --git a/chapters/08_01_references/02_image b/chapters/08_01_references/02_image
new file mode 100644
index 0000000..11f3155
--- /dev/null
+++ b/chapters/08_01_references/02_image
@@ -0,0 +1,8 @@
+\begin{figure}[ht]
+\centering
+\includegraphics[scale=1]{assets/flutter/archdiagram.png}
+\caption{Example caption}
+
+
+\caption*{Quelle: hier Quellangabe}
+\end{figure}
\ No newline at end of file
diff --git a/chapters/08_literatur/00_literature.md b/chapters/08_literatur/00_literature.md
index 8e4b4b1..394d08f 100644
--- a/chapters/08_literatur/00_literature.md
+++ b/chapters/08_literatur/00_literature.md
@@ -1,3 +1,5 @@
\pagebreak
# Literaturverzeichnis
+
+\setstretch{1.0}
diff --git a/code/flutter_architecture/.gitignore b/code/flutter_architecture/.gitignore
new file mode 100644
index 0000000..29a3a50
--- /dev/null
+++ b/code/flutter_architecture/.gitignore
@@ -0,0 +1,43 @@
+# Miscellaneous
+*.class
+*.log
+*.pyc
+*.swp
+.DS_Store
+.atom/
+.buildlog/
+.history
+.svn/
+migrate_working_dir/
+
+# IntelliJ related
+*.iml
+*.ipr
+*.iws
+.idea/
+
+# The .vscode folder contains launch configuration and tasks you configure in
+# VS Code which you may wish to be included in version control, so this line
+# is commented out by default.
+#.vscode/
+
+# Flutter/Dart/Pub related
+**/doc/api/
+**/ios/Flutter/.last_build_id
+.dart_tool/
+.flutter-plugins
+.flutter-plugins-dependencies
+.pub-cache/
+.pub/
+/build/
+
+# Symbolication related
+app.*.symbols
+
+# Obfuscation related
+app.*.map.json
+
+# Android Studio will place build artifacts here
+/android/app/debug
+/android/app/profile
+/android/app/release
diff --git a/code/flutter_architecture/.metadata b/code/flutter_architecture/.metadata
new file mode 100644
index 0000000..068aba9
--- /dev/null
+++ b/code/flutter_architecture/.metadata
@@ -0,0 +1,42 @@
+# This file tracks properties of this Flutter project.
+# Used by Flutter tool to assess capabilities and perform upgrades etc.
+#
+# This file should be version controlled and should not be manually edited.
+
+version:
+ revision: "41456452f29d64e8deb623a3c927524bcf9f111b"
+ channel: "stable"
+
+project_type: app
+
+# Tracks metadata for the flutter migrate command
+migration:
+ platforms:
+ - platform: root
+ create_revision: 41456452f29d64e8deb623a3c927524bcf9f111b
+ base_revision: 41456452f29d64e8deb623a3c927524bcf9f111b
+ - platform: android
+ create_revision: 41456452f29d64e8deb623a3c927524bcf9f111b
+ base_revision: 41456452f29d64e8deb623a3c927524bcf9f111b
+ - platform: ios
+ create_revision: 41456452f29d64e8deb623a3c927524bcf9f111b
+ base_revision: 41456452f29d64e8deb623a3c927524bcf9f111b
+ - platform: linux
+ create_revision: 41456452f29d64e8deb623a3c927524bcf9f111b
+ base_revision: 41456452f29d64e8deb623a3c927524bcf9f111b
+ - platform: macos
+ create_revision: 41456452f29d64e8deb623a3c927524bcf9f111b
+ base_revision: 41456452f29d64e8deb623a3c927524bcf9f111b
+ - platform: web
+ create_revision: 41456452f29d64e8deb623a3c927524bcf9f111b
+ base_revision: 41456452f29d64e8deb623a3c927524bcf9f111b
+
+ # User provided section
+
+ # List of Local paths (relative to this file) that should be
+ # ignored by the migrate tool.
+ #
+ # Files that are not part of the templates will be ignored by default.
+ unmanaged_files:
+ - 'lib/main.dart'
+ - 'ios/Runner.xcodeproj/project.pbxproj'
diff --git a/code/flutter_architecture/README.md b/code/flutter_architecture/README.md
new file mode 100644
index 0000000..cc9d49c
--- /dev/null
+++ b/code/flutter_architecture/README.md
@@ -0,0 +1,16 @@
+# flutter_architecture
+
+A new Flutter project.
+
+## Getting Started
+
+This project is a starting point for a Flutter application.
+
+A few resources to get you started if this is your first Flutter project:
+
+- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab)
+- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook)
+
+For help getting started with Flutter development, view the
+[online documentation](https://docs.flutter.dev/), which offers tutorials,
+samples, guidance on mobile development, and a full API reference.
diff --git a/code/flutter_architecture/analysis_options.yaml b/code/flutter_architecture/analysis_options.yaml
new file mode 100644
index 0000000..0d29021
--- /dev/null
+++ b/code/flutter_architecture/analysis_options.yaml
@@ -0,0 +1,28 @@
+# This file configures the analyzer, which statically analyzes Dart code to
+# check for errors, warnings, and lints.
+#
+# The issues identified by the analyzer are surfaced in the UI of Dart-enabled
+# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be
+# invoked from the command line by running `flutter analyze`.
+
+# The following line activates a set of recommended lints for Flutter apps,
+# packages, and plugins designed to encourage good coding practices.
+include: package:flutter_lints/flutter.yaml
+
+linter:
+ # The lint rules applied to this project can be customized in the
+ # section below to disable rules from the `package:flutter_lints/flutter.yaml`
+ # included above or to enable additional rules. A list of all available lints
+ # and their documentation is published at https://dart.dev/lints.
+ #
+ # Instead of disabling a lint rule for the entire project in the
+ # section below, it can also be suppressed for a single line of code
+ # or a specific dart file by using the `// ignore: name_of_lint` and
+ # `// ignore_for_file: name_of_lint` syntax on the line or in the file
+ # producing the lint.
+ rules:
+ # avoid_print: false # Uncomment to disable the `avoid_print` rule
+ # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule
+
+# Additional information about this file can be found at
+# https://dart.dev/guides/language/analysis-options
diff --git a/code/flutter_architecture/android/.gitignore b/code/flutter_architecture/android/.gitignore
new file mode 100644
index 0000000..6f56801
--- /dev/null
+++ b/code/flutter_architecture/android/.gitignore
@@ -0,0 +1,13 @@
+gradle-wrapper.jar
+/.gradle
+/captures/
+/gradlew
+/gradlew.bat
+/local.properties
+GeneratedPluginRegistrant.java
+
+# Remember to never publicly share your keystore.
+# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
+key.properties
+**/*.keystore
+**/*.jks
diff --git a/code/flutter_architecture/android/app/build.gradle b/code/flutter_architecture/android/app/build.gradle
new file mode 100644
index 0000000..5170d83
--- /dev/null
+++ b/code/flutter_architecture/android/app/build.gradle
@@ -0,0 +1,67 @@
+plugins {
+ id "com.android.application"
+ id "kotlin-android"
+ id "dev.flutter.flutter-gradle-plugin"
+}
+
+def localProperties = new Properties()
+def localPropertiesFile = rootProject.file('local.properties')
+if (localPropertiesFile.exists()) {
+ localPropertiesFile.withReader('UTF-8') { reader ->
+ localProperties.load(reader)
+ }
+}
+
+def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
+if (flutterVersionCode == null) {
+ flutterVersionCode = '1'
+}
+
+def flutterVersionName = localProperties.getProperty('flutter.versionName')
+if (flutterVersionName == null) {
+ flutterVersionName = '1.0'
+}
+
+android {
+ namespace "com.example.flutter_architecture"
+ compileSdkVersion flutter.compileSdkVersion
+ ndkVersion flutter.ndkVersion
+
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+
+ kotlinOptions {
+ jvmTarget = '1.8'
+ }
+
+ sourceSets {
+ main.java.srcDirs += 'src/main/kotlin'
+ }
+
+ defaultConfig {
+ // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
+ applicationId "com.example.flutter_architecture"
+ // You can update the following values to match your application needs.
+ // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
+ minSdkVersion flutter.minSdkVersion
+ targetSdkVersion flutter.targetSdkVersion
+ versionCode flutterVersionCode.toInteger()
+ versionName flutterVersionName
+ }
+
+ buildTypes {
+ release {
+ // TODO: Add your own signing config for the release build.
+ // Signing with the debug keys for now, so `flutter run --release` works.
+ signingConfig signingConfigs.debug
+ }
+ }
+}
+
+flutter {
+ source '../..'
+}
+
+dependencies {}
diff --git a/code/flutter_architecture/android/app/src/debug/AndroidManifest.xml b/code/flutter_architecture/android/app/src/debug/AndroidManifest.xml
new file mode 100644
index 0000000..399f698
--- /dev/null
+++ b/code/flutter_architecture/android/app/src/debug/AndroidManifest.xml
@@ -0,0 +1,7 @@
+
+
+
+
diff --git a/code/flutter_architecture/android/app/src/main/AndroidManifest.xml b/code/flutter_architecture/android/app/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..1d612bc
--- /dev/null
+++ b/code/flutter_architecture/android/app/src/main/AndroidManifest.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/code/flutter_architecture/android/app/src/main/kotlin/com/example/flutter_architecture/MainActivity.kt b/code/flutter_architecture/android/app/src/main/kotlin/com/example/flutter_architecture/MainActivity.kt
new file mode 100644
index 0000000..f344ca1
--- /dev/null
+++ b/code/flutter_architecture/android/app/src/main/kotlin/com/example/flutter_architecture/MainActivity.kt
@@ -0,0 +1,6 @@
+package com.example.flutter_architecture
+
+import io.flutter.embedding.android.FlutterActivity
+
+class MainActivity: FlutterActivity() {
+}
diff --git a/code/flutter_architecture/android/app/src/main/res/drawable-v21/launch_background.xml b/code/flutter_architecture/android/app/src/main/res/drawable-v21/launch_background.xml
new file mode 100644
index 0000000..f74085f
--- /dev/null
+++ b/code/flutter_architecture/android/app/src/main/res/drawable-v21/launch_background.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
diff --git a/code/flutter_architecture/android/app/src/main/res/drawable/launch_background.xml b/code/flutter_architecture/android/app/src/main/res/drawable/launch_background.xml
new file mode 100644
index 0000000..304732f
--- /dev/null
+++ b/code/flutter_architecture/android/app/src/main/res/drawable/launch_background.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
diff --git a/code/flutter_architecture/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/code/flutter_architecture/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 0000000..db77bb4
Binary files /dev/null and b/code/flutter_architecture/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/code/flutter_architecture/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/code/flutter_architecture/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 0000000..17987b7
Binary files /dev/null and b/code/flutter_architecture/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/code/flutter_architecture/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/code/flutter_architecture/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..09d4391
Binary files /dev/null and b/code/flutter_architecture/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/code/flutter_architecture/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/code/flutter_architecture/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..d5f1c8d
Binary files /dev/null and b/code/flutter_architecture/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/code/flutter_architecture/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/code/flutter_architecture/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 0000000..4d6372e
Binary files /dev/null and b/code/flutter_architecture/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/code/flutter_architecture/android/app/src/main/res/values-night/styles.xml b/code/flutter_architecture/android/app/src/main/res/values-night/styles.xml
new file mode 100644
index 0000000..06952be
--- /dev/null
+++ b/code/flutter_architecture/android/app/src/main/res/values-night/styles.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
diff --git a/code/flutter_architecture/android/app/src/main/res/values/styles.xml b/code/flutter_architecture/android/app/src/main/res/values/styles.xml
new file mode 100644
index 0000000..cb1ef88
--- /dev/null
+++ b/code/flutter_architecture/android/app/src/main/res/values/styles.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
diff --git a/code/flutter_architecture/android/app/src/profile/AndroidManifest.xml b/code/flutter_architecture/android/app/src/profile/AndroidManifest.xml
new file mode 100644
index 0000000..399f698
--- /dev/null
+++ b/code/flutter_architecture/android/app/src/profile/AndroidManifest.xml
@@ -0,0 +1,7 @@
+
+
+
+
diff --git a/code/flutter_architecture/android/build.gradle b/code/flutter_architecture/android/build.gradle
new file mode 100644
index 0000000..e83fb5d
--- /dev/null
+++ b/code/flutter_architecture/android/build.gradle
@@ -0,0 +1,30 @@
+buildscript {
+ ext.kotlin_version = '1.7.10'
+ repositories {
+ google()
+ mavenCentral()
+ }
+
+ dependencies {
+ classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
+ }
+}
+
+allprojects {
+ repositories {
+ google()
+ mavenCentral()
+ }
+}
+
+rootProject.buildDir = '../build'
+subprojects {
+ project.buildDir = "${rootProject.buildDir}/${project.name}"
+}
+subprojects {
+ project.evaluationDependsOn(':app')
+}
+
+tasks.register("clean", Delete) {
+ delete rootProject.buildDir
+}
diff --git a/code/flutter_architecture/android/gradle.properties b/code/flutter_architecture/android/gradle.properties
new file mode 100644
index 0000000..598d13f
--- /dev/null
+++ b/code/flutter_architecture/android/gradle.properties
@@ -0,0 +1,3 @@
+org.gradle.jvmargs=-Xmx4G
+android.useAndroidX=true
+android.enableJetifier=true
diff --git a/code/flutter_architecture/android/gradle/wrapper/gradle-wrapper.properties b/code/flutter_architecture/android/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..3c472b9
--- /dev/null
+++ b/code/flutter_architecture/android/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,5 @@
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip
diff --git a/code/flutter_architecture/android/settings.gradle b/code/flutter_architecture/android/settings.gradle
new file mode 100644
index 0000000..7cd7128
--- /dev/null
+++ b/code/flutter_architecture/android/settings.gradle
@@ -0,0 +1,29 @@
+pluginManagement {
+ def flutterSdkPath = {
+ def properties = new Properties()
+ file("local.properties").withInputStream { properties.load(it) }
+ def flutterSdkPath = properties.getProperty("flutter.sdk")
+ assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
+ return flutterSdkPath
+ }
+ settings.ext.flutterSdkPath = flutterSdkPath()
+
+ includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle")
+
+ repositories {
+ google()
+ mavenCentral()
+ gradlePluginPortal()
+ }
+
+ plugins {
+ id "dev.flutter.flutter-gradle-plugin" version "1.0.0" apply false
+ }
+}
+
+plugins {
+ id "dev.flutter.flutter-plugin-loader" version "1.0.0"
+ id "com.android.application" version "7.3.0" apply false
+}
+
+include ":app"
diff --git a/code/flutter_architecture/ios/.gitignore b/code/flutter_architecture/ios/.gitignore
new file mode 100644
index 0000000..7a7f987
--- /dev/null
+++ b/code/flutter_architecture/ios/.gitignore
@@ -0,0 +1,34 @@
+**/dgph
+*.mode1v3
+*.mode2v3
+*.moved-aside
+*.pbxuser
+*.perspectivev3
+**/*sync/
+.sconsign.dblite
+.tags*
+**/.vagrant/
+**/DerivedData/
+Icon?
+**/Pods/
+**/.symlinks/
+profile
+xcuserdata
+**/.generated/
+Flutter/App.framework
+Flutter/Flutter.framework
+Flutter/Flutter.podspec
+Flutter/Generated.xcconfig
+Flutter/ephemeral/
+Flutter/app.flx
+Flutter/app.zip
+Flutter/flutter_assets/
+Flutter/flutter_export_environment.sh
+ServiceDefinitions.json
+Runner/GeneratedPluginRegistrant.*
+
+# Exceptions to above rules.
+!default.mode1v3
+!default.mode2v3
+!default.pbxuser
+!default.perspectivev3
diff --git a/code/flutter_architecture/ios/Flutter/AppFrameworkInfo.plist b/code/flutter_architecture/ios/Flutter/AppFrameworkInfo.plist
new file mode 100644
index 0000000..7c56964
--- /dev/null
+++ b/code/flutter_architecture/ios/Flutter/AppFrameworkInfo.plist
@@ -0,0 +1,26 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ en
+ CFBundleExecutable
+ App
+ CFBundleIdentifier
+ io.flutter.flutter.app
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ App
+ CFBundlePackageType
+ FMWK
+ CFBundleShortVersionString
+ 1.0
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ 1.0
+ MinimumOSVersion
+ 12.0
+
+
diff --git a/code/flutter_architecture/ios/Flutter/Debug.xcconfig b/code/flutter_architecture/ios/Flutter/Debug.xcconfig
new file mode 100644
index 0000000..592ceee
--- /dev/null
+++ b/code/flutter_architecture/ios/Flutter/Debug.xcconfig
@@ -0,0 +1 @@
+#include "Generated.xcconfig"
diff --git a/code/flutter_architecture/ios/Flutter/Release.xcconfig b/code/flutter_architecture/ios/Flutter/Release.xcconfig
new file mode 100644
index 0000000..592ceee
--- /dev/null
+++ b/code/flutter_architecture/ios/Flutter/Release.xcconfig
@@ -0,0 +1 @@
+#include "Generated.xcconfig"
diff --git a/code/flutter_architecture/ios/Runner.xcodeproj/project.pbxproj b/code/flutter_architecture/ios/Runner.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..00758c8
--- /dev/null
+++ b/code/flutter_architecture/ios/Runner.xcodeproj/project.pbxproj
@@ -0,0 +1,617 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 54;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
+ 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
+ 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
+ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
+ 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
+ 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
+ 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+ 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 97C146E61CF9000F007C117D /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 97C146ED1CF9000F007C117D;
+ remoteInfo = Runner;
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ 9705A1C41CF9048500538489 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; };
+ 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; };
+ 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; };
+ 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; };
+ 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
+ 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; };
+ 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; };
+ 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; };
+ 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
+ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
+ 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
+ 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
+ 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; };
+ 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 97C146EB1CF9000F007C117D /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 9740EEB11CF90186004384FC /* Flutter */ = {
+ isa = PBXGroup;
+ children = (
+ 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
+ 9740EEB21CF90195004384FC /* Debug.xcconfig */,
+ 7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
+ 9740EEB31CF90195004384FC /* Generated.xcconfig */,
+ );
+ name = Flutter;
+ sourceTree = "";
+ };
+ 331C8082294A63A400263BE5 /* RunnerTests */ = {
+ isa = PBXGroup;
+ children = (
+ 331C807B294A618700263BE5 /* RunnerTests.swift */,
+ );
+ path = RunnerTests;
+ sourceTree = "";
+ };
+ 97C146E51CF9000F007C117D = {
+ isa = PBXGroup;
+ children = (
+ 9740EEB11CF90186004384FC /* Flutter */,
+ 97C146F01CF9000F007C117D /* Runner */,
+ 97C146EF1CF9000F007C117D /* Products */,
+ 331C8082294A63A400263BE5 /* RunnerTests */,
+ );
+ sourceTree = "";
+ };
+ 97C146EF1CF9000F007C117D /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 97C146EE1CF9000F007C117D /* Runner.app */,
+ 331C8081294A63A400263BE5 /* RunnerTests.xctest */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 97C146F01CF9000F007C117D /* Runner */ = {
+ isa = PBXGroup;
+ children = (
+ 97C146FA1CF9000F007C117D /* Main.storyboard */,
+ 97C146FD1CF9000F007C117D /* Assets.xcassets */,
+ 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
+ 97C147021CF9000F007C117D /* Info.plist */,
+ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
+ 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
+ 74858FAE1ED2DC5600515810 /* AppDelegate.swift */,
+ 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */,
+ );
+ path = Runner;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 331C8080294A63A400263BE5 /* RunnerTests */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */;
+ buildPhases = (
+ 331C807D294A63A400263BE5 /* Sources */,
+ 331C807E294A63A400263BE5 /* Frameworks */,
+ 331C807F294A63A400263BE5 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 331C8086294A63A400263BE5 /* PBXTargetDependency */,
+ );
+ name = RunnerTests;
+ productName = RunnerTests;
+ productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */;
+ productType = "com.apple.product-type.bundle.unit-test";
+ };
+ 97C146ED1CF9000F007C117D /* Runner */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
+ buildPhases = (
+ 9740EEB61CF901F6004384FC /* Run Script */,
+ 97C146EA1CF9000F007C117D /* Sources */,
+ 97C146EB1CF9000F007C117D /* Frameworks */,
+ 97C146EC1CF9000F007C117D /* Resources */,
+ 9705A1C41CF9048500538489 /* Embed Frameworks */,
+ 3B06AD1E1E4923F5004D2608 /* Thin Binary */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = Runner;
+ productName = Runner;
+ productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 97C146E61CF9000F007C117D /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ BuildIndependentTargetsInParallel = YES;
+ LastUpgradeCheck = 1430;
+ ORGANIZATIONNAME = "";
+ TargetAttributes = {
+ 331C8080294A63A400263BE5 = {
+ CreatedOnToolsVersion = 14.0;
+ TestTargetID = 97C146ED1CF9000F007C117D;
+ };
+ 97C146ED1CF9000F007C117D = {
+ CreatedOnToolsVersion = 7.3.1;
+ LastSwiftMigration = 1100;
+ };
+ };
+ };
+ buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
+ compatibilityVersion = "Xcode 9.3";
+ developmentRegion = en;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ Base,
+ );
+ mainGroup = 97C146E51CF9000F007C117D;
+ productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 97C146ED1CF9000F007C117D /* Runner */,
+ 331C8080294A63A400263BE5 /* RunnerTests */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 331C807F294A63A400263BE5 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 97C146EC1CF9000F007C117D /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
+ 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
+ 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
+ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
+ isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}",
+ );
+ name = "Thin Binary";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
+ };
+ 9740EEB61CF901F6004384FC /* Run Script */ = {
+ isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "Run Script";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 331C807D294A63A400263BE5 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 97C146EA1CF9000F007C117D /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,
+ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+ 331C8086294A63A400263BE5 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 97C146ED1CF9000F007C117D /* Runner */;
+ targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */;
+ };
+/* End PBXTargetDependency section */
+
+/* Begin PBXVariantGroup section */
+ 97C146FA1CF9000F007C117D /* Main.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 97C146FB1CF9000F007C117D /* Base */,
+ );
+ name = Main.storyboard;
+ sourceTree = "";
+ };
+ 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 97C147001CF9000F007C117D /* Base */,
+ );
+ name = LaunchScreen.storyboard;
+ sourceTree = "";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ 249021D3217E4FDB00AE95B9 /* Profile */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ SDKROOT = iphoneos;
+ SUPPORTED_PLATFORMS = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Profile;
+ };
+ 249021D4217E4FDB00AE95B9 /* Profile */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CLANG_ENABLE_MODULES = YES;
+ CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
+ DEVELOPMENT_TEAM = T67F6A44RM;
+ ENABLE_BITCODE = NO;
+ INFOPLIST_FILE = Runner/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.example.flutterArchitecture;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
+ SWIFT_VERSION = 5.0;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = Profile;
+ };
+ 331C8088294A63A400263BE5 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = AE0B7B92F70575B8D7E0D07E /* Pods-RunnerTests.debug.xcconfig */;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ GENERATE_INFOPLIST_FILE = YES;
+ MARKETING_VERSION = 1.0;
+ PRODUCT_BUNDLE_IDENTIFIER = com.example.flutterArchitecture.RunnerTests;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
+ };
+ name = Debug;
+ };
+ 331C8089294A63A400263BE5 /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 89B67EB44CE7B6631473024E /* Pods-RunnerTests.release.xcconfig */;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ GENERATE_INFOPLIST_FILE = YES;
+ MARKETING_VERSION = 1.0;
+ PRODUCT_BUNDLE_IDENTIFIER = com.example.flutterArchitecture.RunnerTests;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_VERSION = 5.0;
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
+ };
+ name = Release;
+ };
+ 331C808A294A63A400263BE5 /* Profile */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 640959BDD8F10B91D80A66BE /* Pods-RunnerTests.profile.xcconfig */;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ CODE_SIGN_STYLE = Automatic;
+ CURRENT_PROJECT_VERSION = 1;
+ GENERATE_INFOPLIST_FILE = YES;
+ MARKETING_VERSION = 1.0;
+ PRODUCT_BUNDLE_IDENTIFIER = com.example.flutterArchitecture.RunnerTests;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_VERSION = 5.0;
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
+ };
+ name = Profile;
+ };
+ 97C147031CF9000F007C117D /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+ MTL_ENABLE_DEBUG_INFO = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ SDKROOT = iphoneos;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Debug;
+ };
+ 97C147041CF9000F007C117D /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu99;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.0;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ SDKROOT = iphoneos;
+ SUPPORTED_PLATFORMS = iphoneos;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-O";
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+ 97C147061CF9000F007C117D /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CLANG_ENABLE_MODULES = YES;
+ CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
+ DEVELOPMENT_TEAM = T67F6A44RM;
+ ENABLE_BITCODE = NO;
+ INFOPLIST_FILE = Runner/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.example.flutterArchitecture;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = Debug;
+ };
+ 97C147071CF9000F007C117D /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CLANG_ENABLE_MODULES = YES;
+ CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
+ DEVELOPMENT_TEAM = T67F6A44RM;
+ ENABLE_BITCODE = NO;
+ INFOPLIST_FILE = Runner/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = com.example.flutterArchitecture;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
+ SWIFT_VERSION = 5.0;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 331C8088294A63A400263BE5 /* Debug */,
+ 331C8089294A63A400263BE5 /* Release */,
+ 331C808A294A63A400263BE5 /* Profile */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 97C147031CF9000F007C117D /* Debug */,
+ 97C147041CF9000F007C117D /* Release */,
+ 249021D3217E4FDB00AE95B9 /* Profile */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 97C147061CF9000F007C117D /* Debug */,
+ 97C147071CF9000F007C117D /* Release */,
+ 249021D4217E4FDB00AE95B9 /* Profile */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 97C146E61CF9000F007C117D /* Project object */;
+}
diff --git a/code/flutter_architecture/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/code/flutter_architecture/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..919434a
--- /dev/null
+++ b/code/flutter_architecture/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/code/flutter_architecture/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/code/flutter_architecture/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 0000000..18d9810
--- /dev/null
+++ b/code/flutter_architecture/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ IDEDidComputeMac32BitWarning
+
+
+
diff --git a/code/flutter_architecture/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/code/flutter_architecture/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
new file mode 100644
index 0000000..f9b0d7c
--- /dev/null
+++ b/code/flutter_architecture/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
@@ -0,0 +1,8 @@
+
+
+
+
+ PreviewsEnabled
+
+
+
diff --git a/code/flutter_architecture/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/code/flutter_architecture/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
new file mode 100644
index 0000000..87131a0
--- /dev/null
+++ b/code/flutter_architecture/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/code/flutter_architecture/ios/Runner.xcworkspace/contents.xcworkspacedata b/code/flutter_architecture/ios/Runner.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..1d526a1
--- /dev/null
+++ b/code/flutter_architecture/ios/Runner.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/code/flutter_architecture/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/code/flutter_architecture/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 0000000..18d9810
--- /dev/null
+++ b/code/flutter_architecture/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ IDEDidComputeMac32BitWarning
+
+
+
diff --git a/code/flutter_architecture/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/code/flutter_architecture/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
new file mode 100644
index 0000000..f9b0d7c
--- /dev/null
+++ b/code/flutter_architecture/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
@@ -0,0 +1,8 @@
+
+
+
+
+ PreviewsEnabled
+
+
+
diff --git a/code/flutter_architecture/ios/Runner/AppDelegate.swift b/code/flutter_architecture/ios/Runner/AppDelegate.swift
new file mode 100644
index 0000000..70693e4
--- /dev/null
+++ b/code/flutter_architecture/ios/Runner/AppDelegate.swift
@@ -0,0 +1,13 @@
+import UIKit
+import Flutter
+
+@UIApplicationMain
+@objc class AppDelegate: FlutterAppDelegate {
+ override func application(
+ _ application: UIApplication,
+ didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
+ ) -> Bool {
+ GeneratedPluginRegistrant.register(with: self)
+ return super.application(application, didFinishLaunchingWithOptions: launchOptions)
+ }
+}
diff --git a/code/flutter_architecture/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/code/flutter_architecture/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 0000000..d36b1fa
--- /dev/null
+++ b/code/flutter_architecture/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,122 @@
+{
+ "images" : [
+ {
+ "size" : "20x20",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-20x20@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "20x20",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-20x20@3x.png",
+ "scale" : "3x"
+ },
+ {
+ "size" : "29x29",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-29x29@1x.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "29x29",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-29x29@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "29x29",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-29x29@3x.png",
+ "scale" : "3x"
+ },
+ {
+ "size" : "40x40",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-40x40@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "40x40",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-40x40@3x.png",
+ "scale" : "3x"
+ },
+ {
+ "size" : "60x60",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-60x60@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "60x60",
+ "idiom" : "iphone",
+ "filename" : "Icon-App-60x60@3x.png",
+ "scale" : "3x"
+ },
+ {
+ "size" : "20x20",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-20x20@1x.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "20x20",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-20x20@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "29x29",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-29x29@1x.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "29x29",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-29x29@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "40x40",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-40x40@1x.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "40x40",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-40x40@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "76x76",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-76x76@1x.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "76x76",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-76x76@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "83.5x83.5",
+ "idiom" : "ipad",
+ "filename" : "Icon-App-83.5x83.5@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "1024x1024",
+ "idiom" : "ios-marketing",
+ "filename" : "Icon-App-1024x1024@1x.png",
+ "scale" : "1x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
diff --git a/code/flutter_architecture/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/code/flutter_architecture/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
new file mode 100644
index 0000000..dc9ada4
Binary files /dev/null and b/code/flutter_architecture/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png differ
diff --git a/code/flutter_architecture/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/code/flutter_architecture/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
new file mode 100644
index 0000000..7353c41
Binary files /dev/null and b/code/flutter_architecture/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ
diff --git a/code/flutter_architecture/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/code/flutter_architecture/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
new file mode 100644
index 0000000..797d452
Binary files /dev/null and b/code/flutter_architecture/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ
diff --git a/code/flutter_architecture/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/code/flutter_architecture/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
new file mode 100644
index 0000000..6ed2d93
Binary files /dev/null and b/code/flutter_architecture/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ
diff --git a/code/flutter_architecture/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/code/flutter_architecture/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
new file mode 100644
index 0000000..4cd7b00
Binary files /dev/null and b/code/flutter_architecture/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ
diff --git a/code/flutter_architecture/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/code/flutter_architecture/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
new file mode 100644
index 0000000..fe73094
Binary files /dev/null and b/code/flutter_architecture/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ
diff --git a/code/flutter_architecture/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/code/flutter_architecture/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
new file mode 100644
index 0000000..321773c
Binary files /dev/null and b/code/flutter_architecture/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ
diff --git a/code/flutter_architecture/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/code/flutter_architecture/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
new file mode 100644
index 0000000..797d452
Binary files /dev/null and b/code/flutter_architecture/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ
diff --git a/code/flutter_architecture/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/code/flutter_architecture/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
new file mode 100644
index 0000000..502f463
Binary files /dev/null and b/code/flutter_architecture/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ
diff --git a/code/flutter_architecture/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/code/flutter_architecture/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
new file mode 100644
index 0000000..0ec3034
Binary files /dev/null and b/code/flutter_architecture/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ
diff --git a/code/flutter_architecture/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/code/flutter_architecture/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
new file mode 100644
index 0000000..0ec3034
Binary files /dev/null and b/code/flutter_architecture/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ
diff --git a/code/flutter_architecture/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/code/flutter_architecture/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
new file mode 100644
index 0000000..e9f5fea
Binary files /dev/null and b/code/flutter_architecture/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ
diff --git a/code/flutter_architecture/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/code/flutter_architecture/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
new file mode 100644
index 0000000..84ac32a
Binary files /dev/null and b/code/flutter_architecture/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ
diff --git a/code/flutter_architecture/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/code/flutter_architecture/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
new file mode 100644
index 0000000..8953cba
Binary files /dev/null and b/code/flutter_architecture/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ
diff --git a/code/flutter_architecture/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/code/flutter_architecture/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
new file mode 100644
index 0000000..0467bf1
Binary files /dev/null and b/code/flutter_architecture/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ
diff --git a/code/flutter_architecture/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/code/flutter_architecture/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
new file mode 100644
index 0000000..0bedcf2
--- /dev/null
+++ b/code/flutter_architecture/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
@@ -0,0 +1,23 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "filename" : "LaunchImage.png",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "universal",
+ "filename" : "LaunchImage@2x.png",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "universal",
+ "filename" : "LaunchImage@3x.png",
+ "scale" : "3x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
diff --git a/code/flutter_architecture/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/code/flutter_architecture/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
new file mode 100644
index 0000000..9da19ea
Binary files /dev/null and b/code/flutter_architecture/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png differ
diff --git a/code/flutter_architecture/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/code/flutter_architecture/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
new file mode 100644
index 0000000..9da19ea
Binary files /dev/null and b/code/flutter_architecture/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png differ
diff --git a/code/flutter_architecture/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/code/flutter_architecture/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
new file mode 100644
index 0000000..9da19ea
Binary files /dev/null and b/code/flutter_architecture/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png differ
diff --git a/code/flutter_architecture/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/code/flutter_architecture/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
new file mode 100644
index 0000000..89c2725
--- /dev/null
+++ b/code/flutter_architecture/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
@@ -0,0 +1,5 @@
+# Launch Screen Assets
+
+You can customize the launch screen with your own desired assets by replacing the image files in this directory.
+
+You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.
\ No newline at end of file
diff --git a/code/flutter_architecture/ios/Runner/Base.lproj/LaunchScreen.storyboard b/code/flutter_architecture/ios/Runner/Base.lproj/LaunchScreen.storyboard
new file mode 100644
index 0000000..f2e259c
--- /dev/null
+++ b/code/flutter_architecture/ios/Runner/Base.lproj/LaunchScreen.storyboard
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/code/flutter_architecture/ios/Runner/Base.lproj/Main.storyboard b/code/flutter_architecture/ios/Runner/Base.lproj/Main.storyboard
new file mode 100644
index 0000000..f3c2851
--- /dev/null
+++ b/code/flutter_architecture/ios/Runner/Base.lproj/Main.storyboard
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/code/flutter_architecture/ios/Runner/Info.plist b/code/flutter_architecture/ios/Runner/Info.plist
new file mode 100644
index 0000000..ada7fee
--- /dev/null
+++ b/code/flutter_architecture/ios/Runner/Info.plist
@@ -0,0 +1,49 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleDisplayName
+ Flutter Architecture
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ flutter_architecture
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+ $(FLUTTER_BUILD_NAME)
+ CFBundleSignature
+ ????
+ CFBundleVersion
+ $(FLUTTER_BUILD_NUMBER)
+ LSRequiresIPhoneOS
+
+ UILaunchStoryboardName
+ LaunchScreen
+ UIMainStoryboardFile
+ Main
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ UISupportedInterfaceOrientations~ipad
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationPortraitUpsideDown
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ CADisableMinimumFrameDurationOnPhone
+
+ UIApplicationSupportsIndirectInputEvents
+
+
+
diff --git a/code/flutter_architecture/ios/Runner/Runner-Bridging-Header.h b/code/flutter_architecture/ios/Runner/Runner-Bridging-Header.h
new file mode 100644
index 0000000..308a2a5
--- /dev/null
+++ b/code/flutter_architecture/ios/Runner/Runner-Bridging-Header.h
@@ -0,0 +1 @@
+#import "GeneratedPluginRegistrant.h"
diff --git a/code/flutter_architecture/ios/RunnerTests/RunnerTests.swift b/code/flutter_architecture/ios/RunnerTests/RunnerTests.swift
new file mode 100644
index 0000000..86a7c3b
--- /dev/null
+++ b/code/flutter_architecture/ios/RunnerTests/RunnerTests.swift
@@ -0,0 +1,12 @@
+import Flutter
+import UIKit
+import XCTest
+
+class RunnerTests: XCTestCase {
+
+ func testExample() {
+ // If you add code to the Runner application, consider adding tests here.
+ // See https://developer.apple.com/documentation/xctest for more information about using XCTest.
+ }
+
+}
diff --git a/code/flutter_architecture/lib/main.dart b/code/flutter_architecture/lib/main.dart
new file mode 100644
index 0000000..d22489a
--- /dev/null
+++ b/code/flutter_architecture/lib/main.dart
@@ -0,0 +1,74 @@
+import 'package:flutter/material.dart';
+
+class MyApp extends StatelessWidget {
+ const MyApp({super.key});
+
+ @override
+ Widget build(BuildContext context) {
+ return MaterialApp(
+ title: 'Flutter Demo',
+ theme: ThemeData(
+ colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
+ useMaterial3: true,
+ ),
+ home: const MyHomePage(title: 'Flutter Demo Home Page'),
+ );
+ }
+}
+
+class MyHomePage extends StatefulWidget {
+ const MyHomePage({super.key, required this.title});
+
+ final String title;
+
+ @override
+ State createState() => _MyHomePageState();
+}
+
+class _MyHomePageState extends State {
+ int _counter = 0;
+
+ void _incrementCounter() {
+ setState(() {
+ _counter++;
+ });
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ return Scaffold(
+ appBar: AppBar(
+ backgroundColor: Theme.of(context).colorScheme.inversePrimary,
+ title: Text(widget.title),
+ ),
+ body: Center(
+ child: Column(
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ const Text(
+ 'You have pushed the button this many times:',
+ ),
+ TextWidget(text: _counter.toString()),
+ ],
+ ),
+ ),
+ floatingActionButton: FloatingActionButton(
+ onPressed: _incrementCounter,
+ tooltip: 'Increment',
+ child: const Icon(Icons.add),
+ ),
+ );
+ }
+}
+
+// start snippet declarative_example
+class TextWidget extends StatelessWidget {
+ const TextWidget({required this.text, super.key});
+ final String text;
+
+ @override
+ Widget build(BuildContext context) {
+ return Text(text);
+ }
+}
+// end snippet declarative_example
diff --git a/code/flutter_architecture/linux/.gitignore b/code/flutter_architecture/linux/.gitignore
new file mode 100644
index 0000000..d3896c9
--- /dev/null
+++ b/code/flutter_architecture/linux/.gitignore
@@ -0,0 +1 @@
+flutter/ephemeral
diff --git a/code/flutter_architecture/linux/CMakeLists.txt b/code/flutter_architecture/linux/CMakeLists.txt
new file mode 100644
index 0000000..75b1193
--- /dev/null
+++ b/code/flutter_architecture/linux/CMakeLists.txt
@@ -0,0 +1,145 @@
+# Project-level configuration.
+cmake_minimum_required(VERSION 3.10)
+project(runner LANGUAGES CXX)
+
+# The name of the executable created for the application. Change this to change
+# the on-disk name of your application.
+set(BINARY_NAME "flutter_architecture")
+# The unique GTK application identifier for this application. See:
+# https://wiki.gnome.org/HowDoI/ChooseApplicationID
+set(APPLICATION_ID "com.example.flutter_architecture")
+
+# Explicitly opt in to modern CMake behaviors to avoid warnings with recent
+# versions of CMake.
+cmake_policy(SET CMP0063 NEW)
+
+# Load bundled libraries from the lib/ directory relative to the binary.
+set(CMAKE_INSTALL_RPATH "$ORIGIN/lib")
+
+# Root filesystem for cross-building.
+if(FLUTTER_TARGET_PLATFORM_SYSROOT)
+ set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT})
+ set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT})
+ set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
+ set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
+ set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
+ set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
+endif()
+
+# Define build configuration options.
+if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
+ set(CMAKE_BUILD_TYPE "Debug" CACHE
+ STRING "Flutter build mode" FORCE)
+ set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS
+ "Debug" "Profile" "Release")
+endif()
+
+# Compilation settings that should be applied to most targets.
+#
+# Be cautious about adding new options here, as plugins use this function by
+# default. In most cases, you should add new options to specific targets instead
+# of modifying this function.
+function(APPLY_STANDARD_SETTINGS TARGET)
+ target_compile_features(${TARGET} PUBLIC cxx_std_14)
+ target_compile_options(${TARGET} PRIVATE -Wall -Werror)
+ target_compile_options(${TARGET} PRIVATE "$<$>:-O3>")
+ target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>")
+endfunction()
+
+# Flutter library and tool build rules.
+set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter")
+add_subdirectory(${FLUTTER_MANAGED_DIR})
+
+# System-level dependencies.
+find_package(PkgConfig REQUIRED)
+pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0)
+
+add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}")
+
+# Define the application target. To change its name, change BINARY_NAME above,
+# not the value here, or `flutter run` will no longer work.
+#
+# Any new source files that you add to the application should be added here.
+add_executable(${BINARY_NAME}
+ "main.cc"
+ "my_application.cc"
+ "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc"
+)
+
+# Apply the standard set of build settings. This can be removed for applications
+# that need different build settings.
+apply_standard_settings(${BINARY_NAME})
+
+# Add dependency libraries. Add any application-specific dependencies here.
+target_link_libraries(${BINARY_NAME} PRIVATE flutter)
+target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK)
+
+# Run the Flutter tool portions of the build. This must not be removed.
+add_dependencies(${BINARY_NAME} flutter_assemble)
+
+# Only the install-generated bundle's copy of the executable will launch
+# correctly, since the resources must in the right relative locations. To avoid
+# people trying to run the unbundled copy, put it in a subdirectory instead of
+# the default top-level location.
+set_target_properties(${BINARY_NAME}
+ PROPERTIES
+ RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run"
+)
+
+
+# Generated plugin build rules, which manage building the plugins and adding
+# them to the application.
+include(flutter/generated_plugins.cmake)
+
+
+# === Installation ===
+# By default, "installing" just makes a relocatable bundle in the build
+# directory.
+set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle")
+if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
+ set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE)
+endif()
+
+# Start with a clean build bundle directory every time.
+install(CODE "
+ file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\")
+ " COMPONENT Runtime)
+
+set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data")
+set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib")
+
+install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}"
+ COMPONENT Runtime)
+
+install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}"
+ COMPONENT Runtime)
+
+install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
+ COMPONENT Runtime)
+
+foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES})
+ install(FILES "${bundled_library}"
+ DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
+ COMPONENT Runtime)
+endforeach(bundled_library)
+
+# Copy the native assets provided by the build.dart from all packages.
+set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/linux/")
+install(DIRECTORY "${NATIVE_ASSETS_DIR}"
+ DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
+ COMPONENT Runtime)
+
+# Fully re-copy the assets directory on each build to avoid having stale files
+# from a previous install.
+set(FLUTTER_ASSET_DIR_NAME "flutter_assets")
+install(CODE "
+ file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\")
+ " COMPONENT Runtime)
+install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}"
+ DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime)
+
+# Install the AOT library on non-Debug builds only.
+if(NOT CMAKE_BUILD_TYPE MATCHES "Debug")
+ install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
+ COMPONENT Runtime)
+endif()
diff --git a/code/flutter_architecture/linux/flutter/CMakeLists.txt b/code/flutter_architecture/linux/flutter/CMakeLists.txt
new file mode 100644
index 0000000..d5bd016
--- /dev/null
+++ b/code/flutter_architecture/linux/flutter/CMakeLists.txt
@@ -0,0 +1,88 @@
+# This file controls Flutter-level build steps. It should not be edited.
+cmake_minimum_required(VERSION 3.10)
+
+set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral")
+
+# Configuration provided via flutter tool.
+include(${EPHEMERAL_DIR}/generated_config.cmake)
+
+# TODO: Move the rest of this into files in ephemeral. See
+# https://github.com/flutter/flutter/issues/57146.
+
+# Serves the same purpose as list(TRANSFORM ... PREPEND ...),
+# which isn't available in 3.10.
+function(list_prepend LIST_NAME PREFIX)
+ set(NEW_LIST "")
+ foreach(element ${${LIST_NAME}})
+ list(APPEND NEW_LIST "${PREFIX}${element}")
+ endforeach(element)
+ set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE)
+endfunction()
+
+# === Flutter Library ===
+# System-level dependencies.
+find_package(PkgConfig REQUIRED)
+pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0)
+pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0)
+pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0)
+
+set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so")
+
+# Published to parent scope for install step.
+set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE)
+set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE)
+set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE)
+set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE)
+
+list(APPEND FLUTTER_LIBRARY_HEADERS
+ "fl_basic_message_channel.h"
+ "fl_binary_codec.h"
+ "fl_binary_messenger.h"
+ "fl_dart_project.h"
+ "fl_engine.h"
+ "fl_json_message_codec.h"
+ "fl_json_method_codec.h"
+ "fl_message_codec.h"
+ "fl_method_call.h"
+ "fl_method_channel.h"
+ "fl_method_codec.h"
+ "fl_method_response.h"
+ "fl_plugin_registrar.h"
+ "fl_plugin_registry.h"
+ "fl_standard_message_codec.h"
+ "fl_standard_method_codec.h"
+ "fl_string_codec.h"
+ "fl_value.h"
+ "fl_view.h"
+ "flutter_linux.h"
+)
+list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/")
+add_library(flutter INTERFACE)
+target_include_directories(flutter INTERFACE
+ "${EPHEMERAL_DIR}"
+)
+target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}")
+target_link_libraries(flutter INTERFACE
+ PkgConfig::GTK
+ PkgConfig::GLIB
+ PkgConfig::GIO
+)
+add_dependencies(flutter flutter_assemble)
+
+# === Flutter tool backend ===
+# _phony_ is a non-existent file to force this command to run every time,
+# since currently there's no way to get a full input/output list from the
+# flutter tool.
+add_custom_command(
+ OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS}
+ ${CMAKE_CURRENT_BINARY_DIR}/_phony_
+ COMMAND ${CMAKE_COMMAND} -E env
+ ${FLUTTER_TOOL_ENVIRONMENT}
+ "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh"
+ ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE}
+ VERBATIM
+)
+add_custom_target(flutter_assemble DEPENDS
+ "${FLUTTER_LIBRARY}"
+ ${FLUTTER_LIBRARY_HEADERS}
+)
diff --git a/code/flutter_architecture/linux/flutter/generated_plugin_registrant.cc b/code/flutter_architecture/linux/flutter/generated_plugin_registrant.cc
new file mode 100644
index 0000000..e71a16d
--- /dev/null
+++ b/code/flutter_architecture/linux/flutter/generated_plugin_registrant.cc
@@ -0,0 +1,11 @@
+//
+// Generated file. Do not edit.
+//
+
+// clang-format off
+
+#include "generated_plugin_registrant.h"
+
+
+void fl_register_plugins(FlPluginRegistry* registry) {
+}
diff --git a/code/flutter_architecture/linux/flutter/generated_plugin_registrant.h b/code/flutter_architecture/linux/flutter/generated_plugin_registrant.h
new file mode 100644
index 0000000..e0f0a47
--- /dev/null
+++ b/code/flutter_architecture/linux/flutter/generated_plugin_registrant.h
@@ -0,0 +1,15 @@
+//
+// Generated file. Do not edit.
+//
+
+// clang-format off
+
+#ifndef GENERATED_PLUGIN_REGISTRANT_
+#define GENERATED_PLUGIN_REGISTRANT_
+
+#include
+
+// Registers Flutter plugins.
+void fl_register_plugins(FlPluginRegistry* registry);
+
+#endif // GENERATED_PLUGIN_REGISTRANT_
diff --git a/code/flutter_architecture/linux/flutter/generated_plugins.cmake b/code/flutter_architecture/linux/flutter/generated_plugins.cmake
new file mode 100644
index 0000000..2e1de87
--- /dev/null
+++ b/code/flutter_architecture/linux/flutter/generated_plugins.cmake
@@ -0,0 +1,23 @@
+#
+# Generated file, do not edit.
+#
+
+list(APPEND FLUTTER_PLUGIN_LIST
+)
+
+list(APPEND FLUTTER_FFI_PLUGIN_LIST
+)
+
+set(PLUGIN_BUNDLED_LIBRARIES)
+
+foreach(plugin ${FLUTTER_PLUGIN_LIST})
+ add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin})
+ target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin)
+ list(APPEND PLUGIN_BUNDLED_LIBRARIES $)
+ list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries})
+endforeach(plugin)
+
+foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST})
+ add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin})
+ list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries})
+endforeach(ffi_plugin)
diff --git a/code/flutter_architecture/linux/main.cc b/code/flutter_architecture/linux/main.cc
new file mode 100644
index 0000000..e7c5c54
--- /dev/null
+++ b/code/flutter_architecture/linux/main.cc
@@ -0,0 +1,6 @@
+#include "my_application.h"
+
+int main(int argc, char** argv) {
+ g_autoptr(MyApplication) app = my_application_new();
+ return g_application_run(G_APPLICATION(app), argc, argv);
+}
diff --git a/code/flutter_architecture/linux/my_application.cc b/code/flutter_architecture/linux/my_application.cc
new file mode 100644
index 0000000..032f3c6
--- /dev/null
+++ b/code/flutter_architecture/linux/my_application.cc
@@ -0,0 +1,104 @@
+#include "my_application.h"
+
+#include
+#ifdef GDK_WINDOWING_X11
+#include
+#endif
+
+#include "flutter/generated_plugin_registrant.h"
+
+struct _MyApplication {
+ GtkApplication parent_instance;
+ char** dart_entrypoint_arguments;
+};
+
+G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION)
+
+// Implements GApplication::activate.
+static void my_application_activate(GApplication* application) {
+ MyApplication* self = MY_APPLICATION(application);
+ GtkWindow* window =
+ GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application)));
+
+ // Use a header bar when running in GNOME as this is the common style used
+ // by applications and is the setup most users will be using (e.g. Ubuntu
+ // desktop).
+ // If running on X and not using GNOME then just use a traditional title bar
+ // in case the window manager does more exotic layout, e.g. tiling.
+ // If running on Wayland assume the header bar will work (may need changing
+ // if future cases occur).
+ gboolean use_header_bar = TRUE;
+#ifdef GDK_WINDOWING_X11
+ GdkScreen* screen = gtk_window_get_screen(window);
+ if (GDK_IS_X11_SCREEN(screen)) {
+ const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen);
+ if (g_strcmp0(wm_name, "GNOME Shell") != 0) {
+ use_header_bar = FALSE;
+ }
+ }
+#endif
+ if (use_header_bar) {
+ GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new());
+ gtk_widget_show(GTK_WIDGET(header_bar));
+ gtk_header_bar_set_title(header_bar, "flutter_architecture");
+ gtk_header_bar_set_show_close_button(header_bar, TRUE);
+ gtk_window_set_titlebar(window, GTK_WIDGET(header_bar));
+ } else {
+ gtk_window_set_title(window, "flutter_architecture");
+ }
+
+ gtk_window_set_default_size(window, 1280, 720);
+ gtk_widget_show(GTK_WIDGET(window));
+
+ g_autoptr(FlDartProject) project = fl_dart_project_new();
+ fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments);
+
+ FlView* view = fl_view_new(project);
+ gtk_widget_show(GTK_WIDGET(view));
+ gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view));
+
+ fl_register_plugins(FL_PLUGIN_REGISTRY(view));
+
+ gtk_widget_grab_focus(GTK_WIDGET(view));
+}
+
+// Implements GApplication::local_command_line.
+static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) {
+ MyApplication* self = MY_APPLICATION(application);
+ // Strip out the first argument as it is the binary name.
+ self->dart_entrypoint_arguments = g_strdupv(*arguments + 1);
+
+ g_autoptr(GError) error = nullptr;
+ if (!g_application_register(application, nullptr, &error)) {
+ g_warning("Failed to register: %s", error->message);
+ *exit_status = 1;
+ return TRUE;
+ }
+
+ g_application_activate(application);
+ *exit_status = 0;
+
+ return TRUE;
+}
+
+// Implements GObject::dispose.
+static void my_application_dispose(GObject* object) {
+ MyApplication* self = MY_APPLICATION(object);
+ g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev);
+ G_OBJECT_CLASS(my_application_parent_class)->dispose(object);
+}
+
+static void my_application_class_init(MyApplicationClass* klass) {
+ G_APPLICATION_CLASS(klass)->activate = my_application_activate;
+ G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line;
+ G_OBJECT_CLASS(klass)->dispose = my_application_dispose;
+}
+
+static void my_application_init(MyApplication* self) {}
+
+MyApplication* my_application_new() {
+ return MY_APPLICATION(g_object_new(my_application_get_type(),
+ "application-id", APPLICATION_ID,
+ "flags", G_APPLICATION_NON_UNIQUE,
+ nullptr));
+}
diff --git a/code/flutter_architecture/linux/my_application.h b/code/flutter_architecture/linux/my_application.h
new file mode 100644
index 0000000..72271d5
--- /dev/null
+++ b/code/flutter_architecture/linux/my_application.h
@@ -0,0 +1,18 @@
+#ifndef FLUTTER_MY_APPLICATION_H_
+#define FLUTTER_MY_APPLICATION_H_
+
+#include
+
+G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION,
+ GtkApplication)
+
+/**
+ * my_application_new:
+ *
+ * Creates a new Flutter-based application.
+ *
+ * Returns: a new #MyApplication.
+ */
+MyApplication* my_application_new();
+
+#endif // FLUTTER_MY_APPLICATION_H_
diff --git a/code/flutter_architecture/macos/.gitignore b/code/flutter_architecture/macos/.gitignore
new file mode 100644
index 0000000..746adbb
--- /dev/null
+++ b/code/flutter_architecture/macos/.gitignore
@@ -0,0 +1,7 @@
+# Flutter-related
+**/Flutter/ephemeral/
+**/Pods/
+
+# Xcode-related
+**/dgph
+**/xcuserdata/
diff --git a/code/flutter_architecture/macos/Flutter/Flutter-Debug.xcconfig b/code/flutter_architecture/macos/Flutter/Flutter-Debug.xcconfig
new file mode 100644
index 0000000..c2efd0b
--- /dev/null
+++ b/code/flutter_architecture/macos/Flutter/Flutter-Debug.xcconfig
@@ -0,0 +1 @@
+#include "ephemeral/Flutter-Generated.xcconfig"
diff --git a/code/flutter_architecture/macos/Flutter/Flutter-Release.xcconfig b/code/flutter_architecture/macos/Flutter/Flutter-Release.xcconfig
new file mode 100644
index 0000000..c2efd0b
--- /dev/null
+++ b/code/flutter_architecture/macos/Flutter/Flutter-Release.xcconfig
@@ -0,0 +1 @@
+#include "ephemeral/Flutter-Generated.xcconfig"
diff --git a/code/flutter_architecture/macos/Flutter/GeneratedPluginRegistrant.swift b/code/flutter_architecture/macos/Flutter/GeneratedPluginRegistrant.swift
new file mode 100644
index 0000000..cccf817
--- /dev/null
+++ b/code/flutter_architecture/macos/Flutter/GeneratedPluginRegistrant.swift
@@ -0,0 +1,10 @@
+//
+// Generated file. Do not edit.
+//
+
+import FlutterMacOS
+import Foundation
+
+
+func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
+}
diff --git a/code/flutter_architecture/macos/Runner.xcodeproj/project.pbxproj b/code/flutter_architecture/macos/Runner.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..7235b0b
--- /dev/null
+++ b/code/flutter_architecture/macos/Runner.xcodeproj/project.pbxproj
@@ -0,0 +1,695 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 54;
+ objects = {
+
+/* Begin PBXAggregateTarget section */
+ 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = {
+ isa = PBXAggregateTarget;
+ buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */;
+ buildPhases = (
+ 33CC111E2044C6BF0003C045 /* ShellScript */,
+ );
+ dependencies = (
+ );
+ name = "Flutter Assemble";
+ productName = FLX;
+ };
+/* End PBXAggregateTarget section */
+
+/* Begin PBXBuildFile section */
+ 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; };
+ 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; };
+ 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; };
+ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; };
+ 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; };
+ 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+ 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 33CC10E52044A3C60003C045 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 33CC10EC2044A3C60003C045;
+ remoteInfo = Runner;
+ };
+ 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 33CC10E52044A3C60003C045 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 33CC111A2044C6BA0003C045;
+ remoteInfo = FLX;
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ 33CC110E2044A8840003C045 /* Bundle Framework */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Bundle Framework";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+ 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; };
+ 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; };
+ 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; };
+ 33CC10ED2044A3C60003C045 /* flutter_architecture.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "flutter_architecture.app"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
+ 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; };
+ 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; };
+ 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; };
+ 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; };
+ 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; };
+ 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; };
+ 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; };
+ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; };
+ 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; };
+ 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; };
+ 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; };
+ 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 331C80D2294CF70F00263BE5 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 33CC10EA2044A3C60003C045 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 331C80D6294CF71000263BE5 /* RunnerTests */ = {
+ isa = PBXGroup;
+ children = (
+ 331C80D7294CF71000263BE5 /* RunnerTests.swift */,
+ );
+ path = RunnerTests;
+ sourceTree = "";
+ };
+ 33BA886A226E78AF003329D5 /* Configs */ = {
+ isa = PBXGroup;
+ children = (
+ 33E5194F232828860026EE4D /* AppInfo.xcconfig */,
+ 9740EEB21CF90195004384FC /* Debug.xcconfig */,
+ 7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
+ 333000ED22D3DE5D00554162 /* Warnings.xcconfig */,
+ );
+ path = Configs;
+ sourceTree = "";
+ };
+ 33CC10E42044A3C60003C045 = {
+ isa = PBXGroup;
+ children = (
+ 33FAB671232836740065AC1E /* Runner */,
+ 33CEB47122A05771004F2AC0 /* Flutter */,
+ 331C80D6294CF71000263BE5 /* RunnerTests */,
+ 33CC10EE2044A3C60003C045 /* Products */,
+ D73912EC22F37F3D000D13A0 /* Frameworks */,
+ );
+ sourceTree = "";
+ };
+ 33CC10EE2044A3C60003C045 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 33CC10ED2044A3C60003C045 /* flutter_architecture.app */,
+ 331C80D5294CF71000263BE5 /* RunnerTests.xctest */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 33CC11242044D66E0003C045 /* Resources */ = {
+ isa = PBXGroup;
+ children = (
+ 33CC10F22044A3C60003C045 /* Assets.xcassets */,
+ 33CC10F42044A3C60003C045 /* MainMenu.xib */,
+ 33CC10F72044A3C60003C045 /* Info.plist */,
+ );
+ name = Resources;
+ path = ..;
+ sourceTree = "";
+ };
+ 33CEB47122A05771004F2AC0 /* Flutter */ = {
+ isa = PBXGroup;
+ children = (
+ 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */,
+ 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */,
+ 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */,
+ 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */,
+ );
+ path = Flutter;
+ sourceTree = "";
+ };
+ 33FAB671232836740065AC1E /* Runner */ = {
+ isa = PBXGroup;
+ children = (
+ 33CC10F02044A3C60003C045 /* AppDelegate.swift */,
+ 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */,
+ 33E51913231747F40026EE4D /* DebugProfile.entitlements */,
+ 33E51914231749380026EE4D /* Release.entitlements */,
+ 33CC11242044D66E0003C045 /* Resources */,
+ 33BA886A226E78AF003329D5 /* Configs */,
+ );
+ path = Runner;
+ sourceTree = "";
+ };
+ D73912EC22F37F3D000D13A0 /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ );
+ name = Frameworks;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 331C80D4294CF70F00263BE5 /* RunnerTests */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */;
+ buildPhases = (
+ 331C80D1294CF70F00263BE5 /* Sources */,
+ 331C80D2294CF70F00263BE5 /* Frameworks */,
+ 331C80D3294CF70F00263BE5 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 331C80DA294CF71000263BE5 /* PBXTargetDependency */,
+ );
+ name = RunnerTests;
+ productName = RunnerTests;
+ productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */;
+ productType = "com.apple.product-type.bundle.unit-test";
+ };
+ 33CC10EC2044A3C60003C045 /* Runner */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */;
+ buildPhases = (
+ 33CC10E92044A3C60003C045 /* Sources */,
+ 33CC10EA2044A3C60003C045 /* Frameworks */,
+ 33CC10EB2044A3C60003C045 /* Resources */,
+ 33CC110E2044A8840003C045 /* Bundle Framework */,
+ 3399D490228B24CF009A79C7 /* ShellScript */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 33CC11202044C79F0003C045 /* PBXTargetDependency */,
+ );
+ name = Runner;
+ productName = Runner;
+ productReference = 33CC10ED2044A3C60003C045 /* flutter_architecture.app */;
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 33CC10E52044A3C60003C045 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ LastSwiftUpdateCheck = 0920;
+ LastUpgradeCheck = 1430;
+ ORGANIZATIONNAME = "";
+ TargetAttributes = {
+ 331C80D4294CF70F00263BE5 = {
+ CreatedOnToolsVersion = 14.0;
+ TestTargetID = 33CC10EC2044A3C60003C045;
+ };
+ 33CC10EC2044A3C60003C045 = {
+ CreatedOnToolsVersion = 9.2;
+ LastSwiftMigration = 1100;
+ ProvisioningStyle = Automatic;
+ SystemCapabilities = {
+ com.apple.Sandbox = {
+ enabled = 1;
+ };
+ };
+ };
+ 33CC111A2044C6BA0003C045 = {
+ CreatedOnToolsVersion = 9.2;
+ ProvisioningStyle = Manual;
+ };
+ };
+ };
+ buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */;
+ compatibilityVersion = "Xcode 9.3";
+ developmentRegion = en;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ Base,
+ );
+ mainGroup = 33CC10E42044A3C60003C045;
+ productRefGroup = 33CC10EE2044A3C60003C045 /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 33CC10EC2044A3C60003C045 /* Runner */,
+ 331C80D4294CF70F00263BE5 /* RunnerTests */,
+ 33CC111A2044C6BA0003C045 /* Flutter Assemble */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 331C80D3294CF70F00263BE5 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 33CC10EB2044A3C60003C045 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */,
+ 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ 3399D490228B24CF009A79C7 /* ShellScript */ = {
+ isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ );
+ inputPaths = (
+ );
+ outputFileListPaths = (
+ );
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n";
+ };
+ 33CC111E2044C6BF0003C045 /* ShellScript */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ Flutter/ephemeral/FlutterInputs.xcfilelist,
+ );
+ inputPaths = (
+ Flutter/ephemeral/tripwire,
+ );
+ outputFileListPaths = (
+ Flutter/ephemeral/FlutterOutputs.xcfilelist,
+ );
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire";
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 331C80D1294CF70F00263BE5 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 33CC10E92044A3C60003C045 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */,
+ 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */,
+ 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+ 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 33CC10EC2044A3C60003C045 /* Runner */;
+ targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */;
+ };
+ 33CC11202044C79F0003C045 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */;
+ targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */;
+ };
+/* End PBXTargetDependency section */
+
+/* Begin PBXVariantGroup section */
+ 33CC10F42044A3C60003C045 /* MainMenu.xib */ = {
+ isa = PBXVariantGroup;
+ children = (
+ 33CC10F52044A3C60003C045 /* Base */,
+ );
+ name = MainMenu.xib;
+ path = Runner;
+ sourceTree = "";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ 331C80DB294CF71000263BE5 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ CURRENT_PROJECT_VERSION = 1;
+ GENERATE_INFOPLIST_FILE = YES;
+ MARKETING_VERSION = 1.0;
+ PRODUCT_BUNDLE_IDENTIFIER = com.example.flutterArchitecture.RunnerTests;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_VERSION = 5.0;
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/flutter_architecture.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/flutter_architecture";
+ };
+ name = Debug;
+ };
+ 331C80DC294CF71000263BE5 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ CURRENT_PROJECT_VERSION = 1;
+ GENERATE_INFOPLIST_FILE = YES;
+ MARKETING_VERSION = 1.0;
+ PRODUCT_BUNDLE_IDENTIFIER = com.example.flutterArchitecture.RunnerTests;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_VERSION = 5.0;
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/flutter_architecture.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/flutter_architecture";
+ };
+ name = Release;
+ };
+ 331C80DD294CF71000263BE5 /* Profile */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ CURRENT_PROJECT_VERSION = 1;
+ GENERATE_INFOPLIST_FILE = YES;
+ MARKETING_VERSION = 1.0;
+ PRODUCT_BUNDLE_IDENTIFIER = com.example.flutterArchitecture.RunnerTests;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_VERSION = 5.0;
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/flutter_architecture.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/flutter_architecture";
+ };
+ name = Profile;
+ };
+ 338D0CE9231458BD00FA5F75 /* Profile */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CODE_SIGN_IDENTITY = "-";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ MACOSX_DEPLOYMENT_TARGET = 10.14;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ SDKROOT = macosx;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-O";
+ };
+ name = Profile;
+ };
+ 338D0CEA231458BD00FA5F75 /* Profile */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CLANG_ENABLE_MODULES = YES;
+ CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements;
+ CODE_SIGN_STYLE = Automatic;
+ COMBINE_HIDPI_IMAGES = YES;
+ INFOPLIST_FILE = Runner/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PROVISIONING_PROFILE_SPECIFIER = "";
+ SWIFT_VERSION = 5.0;
+ };
+ name = Profile;
+ };
+ 338D0CEB231458BD00FA5F75 /* Profile */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_STYLE = Manual;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ };
+ name = Profile;
+ };
+ 33CC10F92044A3C60003C045 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CODE_SIGN_IDENTITY = "-";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ MACOSX_DEPLOYMENT_TARGET = 10.14;
+ MTL_ENABLE_DEBUG_INFO = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ SDKROOT = macosx;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ };
+ name = Debug;
+ };
+ 33CC10FA2044A3C60003C045 /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CODE_SIGN_IDENTITY = "-";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ MACOSX_DEPLOYMENT_TARGET = 10.14;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ SDKROOT = macosx;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-O";
+ };
+ name = Release;
+ };
+ 33CC10FC2044A3C60003C045 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CLANG_ENABLE_MODULES = YES;
+ CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements;
+ CODE_SIGN_STYLE = Automatic;
+ COMBINE_HIDPI_IMAGES = YES;
+ INFOPLIST_FILE = Runner/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PROVISIONING_PROFILE_SPECIFIER = "";
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ };
+ name = Debug;
+ };
+ 33CC10FD2044A3C60003C045 /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CLANG_ENABLE_MODULES = YES;
+ CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements;
+ CODE_SIGN_STYLE = Automatic;
+ COMBINE_HIDPI_IMAGES = YES;
+ INFOPLIST_FILE = Runner/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/../Frameworks",
+ );
+ PROVISIONING_PROFILE_SPECIFIER = "";
+ SWIFT_VERSION = 5.0;
+ };
+ name = Release;
+ };
+ 33CC111C2044C6BA0003C045 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_STYLE = Manual;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ };
+ name = Debug;
+ };
+ 33CC111D2044C6BA0003C045 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_STYLE = Automatic;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 331C80DB294CF71000263BE5 /* Debug */,
+ 331C80DC294CF71000263BE5 /* Release */,
+ 331C80DD294CF71000263BE5 /* Profile */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 33CC10F92044A3C60003C045 /* Debug */,
+ 33CC10FA2044A3C60003C045 /* Release */,
+ 338D0CE9231458BD00FA5F75 /* Profile */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 33CC10FC2044A3C60003C045 /* Debug */,
+ 33CC10FD2044A3C60003C045 /* Release */,
+ 338D0CEA231458BD00FA5F75 /* Profile */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 33CC111C2044C6BA0003C045 /* Debug */,
+ 33CC111D2044C6BA0003C045 /* Release */,
+ 338D0CEB231458BD00FA5F75 /* Profile */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 33CC10E52044A3C60003C045 /* Project object */;
+}
diff --git a/code/flutter_architecture/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/code/flutter_architecture/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 0000000..18d9810
--- /dev/null
+++ b/code/flutter_architecture/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ IDEDidComputeMac32BitWarning
+
+
+
diff --git a/code/flutter_architecture/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/code/flutter_architecture/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
new file mode 100644
index 0000000..f999e47
--- /dev/null
+++ b/code/flutter_architecture/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/code/flutter_architecture/macos/Runner.xcworkspace/contents.xcworkspacedata b/code/flutter_architecture/macos/Runner.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..1d526a1
--- /dev/null
+++ b/code/flutter_architecture/macos/Runner.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/code/flutter_architecture/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/code/flutter_architecture/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 0000000..18d9810
--- /dev/null
+++ b/code/flutter_architecture/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ IDEDidComputeMac32BitWarning
+
+
+
diff --git a/code/flutter_architecture/macos/Runner/AppDelegate.swift b/code/flutter_architecture/macos/Runner/AppDelegate.swift
new file mode 100644
index 0000000..d53ef64
--- /dev/null
+++ b/code/flutter_architecture/macos/Runner/AppDelegate.swift
@@ -0,0 +1,9 @@
+import Cocoa
+import FlutterMacOS
+
+@NSApplicationMain
+class AppDelegate: FlutterAppDelegate {
+ override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
+ return true
+ }
+}
diff --git a/code/flutter_architecture/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/code/flutter_architecture/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 0000000..a2ec33f
--- /dev/null
+++ b/code/flutter_architecture/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,68 @@
+{
+ "images" : [
+ {
+ "size" : "16x16",
+ "idiom" : "mac",
+ "filename" : "app_icon_16.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "16x16",
+ "idiom" : "mac",
+ "filename" : "app_icon_32.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "32x32",
+ "idiom" : "mac",
+ "filename" : "app_icon_32.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "32x32",
+ "idiom" : "mac",
+ "filename" : "app_icon_64.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "128x128",
+ "idiom" : "mac",
+ "filename" : "app_icon_128.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "128x128",
+ "idiom" : "mac",
+ "filename" : "app_icon_256.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "256x256",
+ "idiom" : "mac",
+ "filename" : "app_icon_256.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "256x256",
+ "idiom" : "mac",
+ "filename" : "app_icon_512.png",
+ "scale" : "2x"
+ },
+ {
+ "size" : "512x512",
+ "idiom" : "mac",
+ "filename" : "app_icon_512.png",
+ "scale" : "1x"
+ },
+ {
+ "size" : "512x512",
+ "idiom" : "mac",
+ "filename" : "app_icon_1024.png",
+ "scale" : "2x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
diff --git a/code/flutter_architecture/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/code/flutter_architecture/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png
new file mode 100644
index 0000000..82b6f9d
Binary files /dev/null and b/code/flutter_architecture/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png differ
diff --git a/code/flutter_architecture/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/code/flutter_architecture/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png
new file mode 100644
index 0000000..13b35eb
Binary files /dev/null and b/code/flutter_architecture/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png differ
diff --git a/code/flutter_architecture/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/code/flutter_architecture/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png
new file mode 100644
index 0000000..0a3f5fa
Binary files /dev/null and b/code/flutter_architecture/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png differ
diff --git a/code/flutter_architecture/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png b/code/flutter_architecture/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png
new file mode 100644
index 0000000..bdb5722
Binary files /dev/null and b/code/flutter_architecture/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png differ
diff --git a/code/flutter_architecture/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png b/code/flutter_architecture/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png
new file mode 100644
index 0000000..f083318
Binary files /dev/null and b/code/flutter_architecture/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png differ
diff --git a/code/flutter_architecture/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png b/code/flutter_architecture/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png
new file mode 100644
index 0000000..326c0e7
Binary files /dev/null and b/code/flutter_architecture/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png differ
diff --git a/code/flutter_architecture/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/code/flutter_architecture/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png
new file mode 100644
index 0000000..2f1632c
Binary files /dev/null and b/code/flutter_architecture/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png differ
diff --git a/code/flutter_architecture/macos/Runner/Base.lproj/MainMenu.xib b/code/flutter_architecture/macos/Runner/Base.lproj/MainMenu.xib
new file mode 100644
index 0000000..80e867a
--- /dev/null
+++ b/code/flutter_architecture/macos/Runner/Base.lproj/MainMenu.xib
@@ -0,0 +1,343 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/code/flutter_architecture/macos/Runner/Configs/AppInfo.xcconfig b/code/flutter_architecture/macos/Runner/Configs/AppInfo.xcconfig
new file mode 100644
index 0000000..f430a4d
--- /dev/null
+++ b/code/flutter_architecture/macos/Runner/Configs/AppInfo.xcconfig
@@ -0,0 +1,14 @@
+// Application-level settings for the Runner target.
+//
+// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the
+// future. If not, the values below would default to using the project name when this becomes a
+// 'flutter create' template.
+
+// The application's name. By default this is also the title of the Flutter window.
+PRODUCT_NAME = flutter_architecture
+
+// The application's bundle identifier
+PRODUCT_BUNDLE_IDENTIFIER = com.example.flutterArchitecture
+
+// The copyright displayed in application information
+PRODUCT_COPYRIGHT = Copyright © 2024 com.example. All rights reserved.
diff --git a/code/flutter_architecture/macos/Runner/Configs/Debug.xcconfig b/code/flutter_architecture/macos/Runner/Configs/Debug.xcconfig
new file mode 100644
index 0000000..36b0fd9
--- /dev/null
+++ b/code/flutter_architecture/macos/Runner/Configs/Debug.xcconfig
@@ -0,0 +1,2 @@
+#include "../../Flutter/Flutter-Debug.xcconfig"
+#include "Warnings.xcconfig"
diff --git a/code/flutter_architecture/macos/Runner/Configs/Release.xcconfig b/code/flutter_architecture/macos/Runner/Configs/Release.xcconfig
new file mode 100644
index 0000000..dff4f49
--- /dev/null
+++ b/code/flutter_architecture/macos/Runner/Configs/Release.xcconfig
@@ -0,0 +1,2 @@
+#include "../../Flutter/Flutter-Release.xcconfig"
+#include "Warnings.xcconfig"
diff --git a/code/flutter_architecture/macos/Runner/Configs/Warnings.xcconfig b/code/flutter_architecture/macos/Runner/Configs/Warnings.xcconfig
new file mode 100644
index 0000000..42bcbf4
--- /dev/null
+++ b/code/flutter_architecture/macos/Runner/Configs/Warnings.xcconfig
@@ -0,0 +1,13 @@
+WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings
+GCC_WARN_UNDECLARED_SELECTOR = YES
+CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES
+CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE
+CLANG_WARN__DUPLICATE_METHOD_MATCH = YES
+CLANG_WARN_PRAGMA_PACK = YES
+CLANG_WARN_STRICT_PROTOTYPES = YES
+CLANG_WARN_COMMA = YES
+GCC_WARN_STRICT_SELECTOR_MATCH = YES
+CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES
+CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES
+GCC_WARN_SHADOW = YES
+CLANG_WARN_UNREACHABLE_CODE = YES
diff --git a/code/flutter_architecture/macos/Runner/DebugProfile.entitlements b/code/flutter_architecture/macos/Runner/DebugProfile.entitlements
new file mode 100644
index 0000000..dddb8a3
--- /dev/null
+++ b/code/flutter_architecture/macos/Runner/DebugProfile.entitlements
@@ -0,0 +1,12 @@
+
+
+
+
+ com.apple.security.app-sandbox
+
+ com.apple.security.cs.allow-jit
+
+ com.apple.security.network.server
+
+
+
diff --git a/code/flutter_architecture/macos/Runner/Info.plist b/code/flutter_architecture/macos/Runner/Info.plist
new file mode 100644
index 0000000..4789daa
--- /dev/null
+++ b/code/flutter_architecture/macos/Runner/Info.plist
@@ -0,0 +1,32 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIconFile
+
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+ $(FLUTTER_BUILD_NAME)
+ CFBundleVersion
+ $(FLUTTER_BUILD_NUMBER)
+ LSMinimumSystemVersion
+ $(MACOSX_DEPLOYMENT_TARGET)
+ NSHumanReadableCopyright
+ $(PRODUCT_COPYRIGHT)
+ NSMainNibFile
+ MainMenu
+ NSPrincipalClass
+ NSApplication
+
+
diff --git a/code/flutter_architecture/macos/Runner/MainFlutterWindow.swift b/code/flutter_architecture/macos/Runner/MainFlutterWindow.swift
new file mode 100644
index 0000000..3cc05eb
--- /dev/null
+++ b/code/flutter_architecture/macos/Runner/MainFlutterWindow.swift
@@ -0,0 +1,15 @@
+import Cocoa
+import FlutterMacOS
+
+class MainFlutterWindow: NSWindow {
+ override func awakeFromNib() {
+ let flutterViewController = FlutterViewController()
+ let windowFrame = self.frame
+ self.contentViewController = flutterViewController
+ self.setFrame(windowFrame, display: true)
+
+ RegisterGeneratedPlugins(registry: flutterViewController)
+
+ super.awakeFromNib()
+ }
+}
diff --git a/code/flutter_architecture/macos/Runner/Release.entitlements b/code/flutter_architecture/macos/Runner/Release.entitlements
new file mode 100644
index 0000000..852fa1a
--- /dev/null
+++ b/code/flutter_architecture/macos/Runner/Release.entitlements
@@ -0,0 +1,8 @@
+
+
+
+
+ com.apple.security.app-sandbox
+
+
+
diff --git a/code/flutter_architecture/macos/RunnerTests/RunnerTests.swift b/code/flutter_architecture/macos/RunnerTests/RunnerTests.swift
new file mode 100644
index 0000000..5418c9f
--- /dev/null
+++ b/code/flutter_architecture/macos/RunnerTests/RunnerTests.swift
@@ -0,0 +1,12 @@
+import FlutterMacOS
+import Cocoa
+import XCTest
+
+class RunnerTests: XCTestCase {
+
+ func testExample() {
+ // If you add code to the Runner application, consider adding tests here.
+ // See https://developer.apple.com/documentation/xctest for more information about using XCTest.
+ }
+
+}
diff --git a/code/flutter_architecture/pubspec.lock b/code/flutter_architecture/pubspec.lock
new file mode 100644
index 0000000..e4a8596
--- /dev/null
+++ b/code/flutter_architecture/pubspec.lock
@@ -0,0 +1,188 @@
+# Generated by pub
+# See https://dart.dev/tools/pub/glossary#lockfile
+packages:
+ async:
+ dependency: transitive
+ description:
+ name: async
+ sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.11.0"
+ boolean_selector:
+ dependency: transitive
+ description:
+ name: boolean_selector
+ sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.1"
+ characters:
+ dependency: transitive
+ description:
+ name: characters
+ sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.3.0"
+ clock:
+ dependency: transitive
+ description:
+ name: clock
+ sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.1.1"
+ collection:
+ dependency: transitive
+ description:
+ name: collection
+ sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.18.0"
+ cupertino_icons:
+ dependency: "direct main"
+ description:
+ name: cupertino_icons
+ sha256: d57953e10f9f8327ce64a508a355f0b1ec902193f66288e8cb5070e7c47eeb2d
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.0.6"
+ fake_async:
+ dependency: transitive
+ description:
+ name: fake_async
+ sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.3.1"
+ flutter:
+ dependency: "direct main"
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ flutter_lints:
+ dependency: "direct dev"
+ description:
+ name: flutter_lints
+ sha256: a25a15ebbdfc33ab1cd26c63a6ee519df92338a9c10f122adda92938253bef04
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.0.3"
+ flutter_test:
+ dependency: "direct dev"
+ description: flutter
+ source: sdk
+ version: "0.0.0"
+ lints:
+ dependency: transitive
+ description:
+ name: lints
+ sha256: "0a217c6c989d21039f1498c3ed9f3ed71b354e69873f13a8dfc3c9fe76f1b452"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.1"
+ matcher:
+ dependency: transitive
+ description:
+ name: matcher
+ sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.12.16"
+ material_color_utilities:
+ dependency: transitive
+ description:
+ name: material_color_utilities
+ sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.5.0"
+ meta:
+ dependency: transitive
+ description:
+ name: meta
+ sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.10.0"
+ path:
+ dependency: transitive
+ description:
+ name: path
+ sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.8.3"
+ sky_engine:
+ dependency: transitive
+ description: flutter
+ source: sdk
+ version: "0.0.99"
+ source_span:
+ dependency: transitive
+ description:
+ name: source_span
+ sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.10.0"
+ stack_trace:
+ dependency: transitive
+ description:
+ name: stack_trace
+ sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.11.1"
+ stream_channel:
+ dependency: transitive
+ description:
+ name: stream_channel
+ sha256: ba2aa5d8cc609d96bbb2899c28934f9e1af5cddbd60a827822ea467161eb54e7
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.2"
+ string_scanner:
+ dependency: transitive
+ description:
+ name: string_scanner
+ sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde"
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.2.0"
+ term_glyph:
+ dependency: transitive
+ description:
+ name: term_glyph
+ sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
+ url: "https://pub.dev"
+ source: hosted
+ version: "1.2.1"
+ test_api:
+ dependency: transitive
+ description:
+ name: test_api
+ sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b"
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.6.1"
+ vector_math:
+ dependency: transitive
+ description:
+ name: vector_math
+ sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
+ url: "https://pub.dev"
+ source: hosted
+ version: "2.1.4"
+ web:
+ dependency: transitive
+ description:
+ name: web
+ sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152
+ url: "https://pub.dev"
+ source: hosted
+ version: "0.3.0"
+sdks:
+ dart: ">=3.2.6 <4.0.0"
diff --git a/code/flutter_architecture/pubspec.yaml b/code/flutter_architecture/pubspec.yaml
new file mode 100644
index 0000000..d8476c7
--- /dev/null
+++ b/code/flutter_architecture/pubspec.yaml
@@ -0,0 +1,90 @@
+name: flutter_architecture
+description: "A new Flutter project."
+# The following line prevents the package from being accidentally published to
+# pub.dev using `flutter pub publish`. This is preferred for private packages.
+publish_to: 'none' # Remove this line if you wish to publish to pub.dev
+
+# The following defines the version and build number for your application.
+# A version number is three numbers separated by dots, like 1.2.43
+# followed by an optional build number separated by a +.
+# Both the version and the builder number may be overridden in flutter
+# build by specifying --build-name and --build-number, respectively.
+# In Android, build-name is used as versionName while build-number used as versionCode.
+# Read more about Android versioning at https://developer.android.com/studio/publish/versioning
+# In iOS, build-name is used as CFBundleShortVersionString while build-number is used as CFBundleVersion.
+# Read more about iOS versioning at
+# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
+# In Windows, build-name is used as the major, minor, and patch parts
+# of the product and file versions while build-number is used as the build suffix.
+version: 1.0.0+1
+
+environment:
+ sdk: '>=3.2.6 <4.0.0'
+
+# Dependencies specify other packages that your package needs in order to work.
+# To automatically upgrade your package dependencies to the latest versions
+# consider running `flutter pub upgrade --major-versions`. Alternatively,
+# dependencies can be manually updated by changing the version numbers below to
+# the latest version available on pub.dev. To see which dependencies have newer
+# versions available, run `flutter pub outdated`.
+dependencies:
+ flutter:
+ sdk: flutter
+
+
+ # The following adds the Cupertino Icons font to your application.
+ # Use with the CupertinoIcons class for iOS style icons.
+ cupertino_icons: ^1.0.2
+
+dev_dependencies:
+ flutter_test:
+ sdk: flutter
+
+ # The "flutter_lints" package below contains a set of recommended lints to
+ # encourage good coding practices. The lint set provided by the package is
+ # activated in the `analysis_options.yaml` file located at the root of your
+ # package. See that file for information about deactivating specific lint
+ # rules and activating additional ones.
+ flutter_lints: ^2.0.0
+
+# For information on the generic Dart part of this file, see the
+# following page: https://dart.dev/tools/pub/pubspec
+
+# The following section is specific to Flutter packages.
+flutter:
+
+ # The following line ensures that the Material Icons font is
+ # included with your application, so that you can use the icons in
+ # the material Icons class.
+ uses-material-design: true
+
+ # To add assets to your application, add an assets section, like this:
+ # assets:
+ # - images/a_dot_burr.jpeg
+ # - images/a_dot_ham.jpeg
+
+ # An image asset can refer to one or more resolution-specific "variants", see
+ # https://flutter.dev/assets-and-images/#resolution-aware
+
+ # For details regarding adding assets from package dependencies, see
+ # https://flutter.dev/assets-and-images/#from-packages
+
+ # To add custom fonts to your application, add a fonts section here,
+ # in this "flutter" section. Each entry in this list should have a
+ # "family" key with the font family name, and a "fonts" key with a
+ # list giving the asset and other descriptors for the font. For
+ # example:
+ # fonts:
+ # - family: Schyler
+ # fonts:
+ # - asset: fonts/Schyler-Regular.ttf
+ # - asset: fonts/Schyler-Italic.ttf
+ # style: italic
+ # - family: Trajan Pro
+ # fonts:
+ # - asset: fonts/TrajanPro.ttf
+ # - asset: fonts/TrajanPro_Bold.ttf
+ # weight: 700
+ #
+ # For details regarding fonts from package dependencies,
+ # see https://flutter.dev/custom-fonts/#from-packages
diff --git a/code/flutter_architecture/test/widget_test.dart b/code/flutter_architecture/test/widget_test.dart
new file mode 100644
index 0000000..6199e1e
--- /dev/null
+++ b/code/flutter_architecture/test/widget_test.dart
@@ -0,0 +1,30 @@
+// This is a basic Flutter widget test.
+//
+// To perform an interaction with a widget in your test, use the WidgetTester
+// utility in the flutter_test package. For example, you can send tap and scroll
+// gestures. You can also use WidgetTester to find child widgets in the widget
+// tree, read text, and verify that the values of widget properties are correct.
+
+import 'package:flutter/material.dart';
+import 'package:flutter_test/flutter_test.dart';
+
+import 'package:flutter_architecture/main.dart';
+
+void main() {
+ testWidgets('Counter increments smoke test', (WidgetTester tester) async {
+ // Build our app and trigger a frame.
+ await tester.pumpWidget(const MyApp());
+
+ // Verify that our counter starts at 0.
+ expect(find.text('0'), findsOneWidget);
+ expect(find.text('1'), findsNothing);
+
+ // Tap the '+' icon and trigger a frame.
+ await tester.tap(find.byIcon(Icons.add));
+ await tester.pump();
+
+ // Verify that our counter has incremented.
+ expect(find.text('0'), findsNothing);
+ expect(find.text('1'), findsOneWidget);
+ });
+}
diff --git a/code/flutter_architecture/web/favicon.png b/code/flutter_architecture/web/favicon.png
new file mode 100644
index 0000000..8aaa46a
Binary files /dev/null and b/code/flutter_architecture/web/favicon.png differ
diff --git a/code/flutter_architecture/web/icons/Icon-192.png b/code/flutter_architecture/web/icons/Icon-192.png
new file mode 100644
index 0000000..b749bfe
Binary files /dev/null and b/code/flutter_architecture/web/icons/Icon-192.png differ
diff --git a/code/flutter_architecture/web/icons/Icon-512.png b/code/flutter_architecture/web/icons/Icon-512.png
new file mode 100644
index 0000000..88cfd48
Binary files /dev/null and b/code/flutter_architecture/web/icons/Icon-512.png differ
diff --git a/code/flutter_architecture/web/icons/Icon-maskable-192.png b/code/flutter_architecture/web/icons/Icon-maskable-192.png
new file mode 100644
index 0000000..eb9b4d7
Binary files /dev/null and b/code/flutter_architecture/web/icons/Icon-maskable-192.png differ
diff --git a/code/flutter_architecture/web/icons/Icon-maskable-512.png b/code/flutter_architecture/web/icons/Icon-maskable-512.png
new file mode 100644
index 0000000..d69c566
Binary files /dev/null and b/code/flutter_architecture/web/icons/Icon-maskable-512.png differ
diff --git a/code/flutter_architecture/web/index.html b/code/flutter_architecture/web/index.html
new file mode 100644
index 0000000..38fb4b4
--- /dev/null
+++ b/code/flutter_architecture/web/index.html
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ flutter_architecture
+
+
+
+
+
+
+
+
+
+
diff --git a/code/flutter_architecture/web/manifest.json b/code/flutter_architecture/web/manifest.json
new file mode 100644
index 0000000..faaf773
--- /dev/null
+++ b/code/flutter_architecture/web/manifest.json
@@ -0,0 +1,35 @@
+{
+ "name": "flutter_architecture",
+ "short_name": "flutter_architecture",
+ "start_url": ".",
+ "display": "standalone",
+ "background_color": "#0175C2",
+ "theme_color": "#0175C2",
+ "description": "A new Flutter project.",
+ "orientation": "portrait-primary",
+ "prefer_related_applications": false,
+ "icons": [
+ {
+ "src": "icons/Icon-192.png",
+ "sizes": "192x192",
+ "type": "image/png"
+ },
+ {
+ "src": "icons/Icon-512.png",
+ "sizes": "512x512",
+ "type": "image/png"
+ },
+ {
+ "src": "icons/Icon-maskable-192.png",
+ "sizes": "192x192",
+ "type": "image/png",
+ "purpose": "maskable"
+ },
+ {
+ "src": "icons/Icon-maskable-512.png",
+ "sizes": "512x512",
+ "type": "image/png",
+ "purpose": "maskable"
+ }
+ ]
+}
diff --git a/harvard-right.csl b/harvard-right.csl
index 2800678..c4b854d 100644
--- a/harvard-right.csl
+++ b/harvard-right.csl
@@ -23,6 +23,12 @@
edited and translated by
edn.
+ n. D.
+
+
+
+
+ o. D.
diff --git a/notes.md b/notes.md
new file mode 100644
index 0000000..1d2686c
--- /dev/null
+++ b/notes.md
@@ -0,0 +1,20 @@
+**Thesis Structure**
+
+1. **Introduction**
+ - Motivation for embedded Linux, relevance of Flutter
+ - Thesis statement and research questions
+2. **Background**
+ - Flutter, Dart, Skia rendering engine
+ - Embedded Linux, key architectural concepts
+ - Review of other cross-platform embedded GUI options
+3. **Case Study Design**
+ - Application description, technology choices (embedder, etc.), limitations
+4. **Performance Analysis**
+ - Benchmarking methodology, results, key insights, optimizations
+5. **User Experience Evaluation**
+ - Testing scenarios, qualitative feedback, interpretation
+6. **Discussion**
+ - Connect findings to research questions
+ - Strengths and weaknesses of Flutter in the embedded Linux space
+7. **Conclusion**
+ - Thesis statement revisit, potential future research
diff --git a/temp_file b/temp_file
new file mode 100644
index 0000000..634e0b6
--- /dev/null
+++ b/temp_file
@@ -0,0 +1,433 @@
+---
+header-includes: |
+ \usepackage[T1]{fontenc}
+ \usepackage[usefilenames,RMstyle={Text,Semibold},SSstyle={Text,Semibold},TTstyle={Text,Semibold},DefaultFeatures={Ligatures=Common}]{plex-otf}
+ \usepackage[a4paper,bindingoffset=0.2in,%
+ left=4cm,right=2cm,top=2cm,bottom=2cm,%
+ footskip=.25in]{geometry}
+ \usepackage{fancyhdr}
+ \usepackage[utf8]{inputenc}
+ \usepackage{tikz}
+ \usetikzlibrary{snakes,arrows,shapes}
+ \usepackage{amsmath}
+ \usepackage{pgfplots}
+ \usepackage{pgfplotstable}
+ \pgfplotsset{compat=1.8}
+ \usepackage{multicol,lipsum}
+ \usepackage{listings}
+ \usepackage{wrapfig}
+ \usepackage[font=small,labelfont=bf]{caption}
+ \usepackage{graphicx}
+ \usepackage{xcolor,stackengine}
+ \usepackage{colortbl}
+ \usepackage{tcolorbox}
+ \usepackage{lastpage}
+ \usepackage{subcaption}
+ \usepackage{tabularx}
+ \usepackage{biblatex}
+ \usepackage{float}
+ \usepackage{refract}
+ \usepackage{svg}
+ \usepackage{setspace}
+ \usepackage{titling}
+ \usepackage{abstract}
+ \usepackage{fvextra}
+ \usepackage{emoji}
+ \DefineVerbatimEnvironment{Highlighting}{Verbatim}{breaklines,commandchars=\\\{\}}
+ \newcommand{\hideFromPandoc}[1]{#1}
+ \hideFromPandoc{
+ \let\Begin\begin
+ \let\End\end
+ }
+ \makeatletter
+ \def\fps@figure{h}
+ \makeatother
+nocite: |
+ @*
+---
+
+\setstretch{1.5}
+
+\setemojifont{Twemoji Mozilla}
+
+\renewcommand{\familydefault}{\sfdefault}
+
+\graphicspath{ {./img/} }
+
+\overfullrule=0pt
+
+\newcolumntype{C}{>{\centering\arraybackslash}X}
+
+\renewcommand{\comment}[1]{\hspace{2em}{\small\textit{#1}}\bigskip\par}
+
+\newcommand\palbox[1]{{\sffamily\fboxsep=5pt\relax\fboxrule=1pt\relax\footnotesize%
+ \fcolorbox{gray!50}{gray!10}{%
+ \stackengine{4pt}{%
+ \colorbox[HTML]{#1}{\rule{30pt}{0pt}\rule{0pt}{30pt}}%
+}{%
+\color{black!60}\stackengine{6pt}{\##1}{\saycolors{#1}}{U}{l}{F}{F}{S}%
+}{U}{l}{F}{F}{S}%
+}%
+}}
+\newcommand\saycolors[1]{\relax}
+
+\lstset{
+basicstyle=\ttfamily,
+columns=fullflexible,
+frame=single,
+breaklines=true,
+postbreak=\mbox{\textcolor{red}{$\hookrightarrow$}\space},
+}
+%Created by Leonardo Rignanese (rignaneseleo)
+%source: https://github.com/rignaneseleo/Latex-listings-Dart
+%added pull_request #1: https://github.com/rignaneseleo/Latex-listings-Dart/pull/1
+
+% Define colors to use
+% You can change the colors (use http://latexcolor.com/)
+\definecolor{codegreen}{rgb}{0,0.6,0}
+\definecolor{codegray}{rgb}{0.5,0.5,0.5}
+\definecolor{codepurple}{rgb}{0.58,0,0.82}
+\definecolor{backcolour}{rgb}{0.95, 0.95, 0.96}
+
+% Define the codebox
+\lstset{
+backgroundcolor=\color{backcolour},
+ commentstyle=\color{codegreen},
+keywordstyle=\color{magenta},
+numberstyle=\tiny\color{codegray},
+stringstyle=\color{codepurple},
+basicstyle=\ttfamily\footnotesize,
+breakatwhitespace=false,
+ breaklines=true,
+ captionpos=b,
+ keepspaces=true,
+ numbers=left,
+ numbersep=5pt,
+ showspaces=false,
+ showstringspaces=false,
+showtabs=false,
+ tabsize=2,
+morestring=\*[d]{"}
+%frame=shadowbox
+}
+
+% Define the code emph rules
+\lstset{
+% Types
+emph=[1]{var, String, int, List, void, Future, await, if, else, throw, async, true, false},% Insert here the types you are using
+emphstyle=[1]{\color{codepurple}},
+% Functions
+emph=[2]{findAllElements,findElements, setState, send, fromPath, add, parse, bytesToString},% Insert here the methods you are using
+emphstyle=[2]{\color{magenta}}
+}
+\thispagestyle{empty}
+
+\begin{titlepage}
+\begin{center}
+\Large Hochschule Rhein-Waal \\
+\vspace{2.5cm}
+\Large Proposal für die Bachelorarbeit \\
+\vspace{2.5cm}
+\huge \textbf{\textsc{Flutter als Entwicklungsplattform für eingebettete Linux Systeme: eine Fallstudie}} \\
+\vspace{1.0cm}
+\Large Fabian Baldeau \\
+\vspace{2.5cm}
+\vspace{0.25cm}
+\textsc{Studiengang}\\
+\vspace{0.25cm}
+\textsc{Medieninformatik}\\
+\vspace{2.5cm}
+\textsc{Gutachter}\\
+\vspace{0.25cm}
+\textsc{Prof. Dr.-Ing. Ido Iurgel}\\
+\vspace{0.25cm}
+\textsc{Prof. Dr. Kai Essig}\\
+\vspace{2cm}
+\end{center}
+
+\end{titlepage}
+
+\pagenumbering{Roman}
+\fancyhf{}
+\fancyhead[C]{\thepage}
+\renewcommand{\headrulewidth}{0pt}
+\pagestyle{fancy}
+\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 Studie untersucht die Eignung von Flutter in
+diesem Kontext durch eine Fallstudie: die Entwicklung
+eines Smart Home Control Centers auf einem Raspberry
+Pi mit einer angepassten Embedded Linux Distribution.
+Leistungsmesswerte, Benutzerfreundlichkeit und der
+Entwicklungsprozess werden bewertet. Die Ergebnisse
+zeigen, dass Flutter, wenn es angepasst wird,
+erfolgreich attraktive und benutzerfreundliche
+eingebettete Schnittstellen mit einigen Kompromissen
+bei der Leistung im Vergleich zu nativen Lösungen
+erstellt.
+
+Die Arbeit beschäftigt sich im Wesentlichen mit der Entwicklung einer
+prototypischen Anwendung mit Flutter für ein eingebettetes Linux System.
+Dabei soll ein Konzept ausgearbeitet werden, dass zeigt wie Flutter in
+eingebetteten Linux Systemen genutzt werden kann und es soll anhand der
+prototypischen Anwendung untersucht werden, wie gut Flutter für diesen
+Verwendungszweck geeignet ist. Die Ergebnisse der Untersuchung sollen
+dann genutzt werden um Empfehlungen für die Nutzung von Flutter in
+eingebetteten Linux Systemen abzuleiten.
+\end{abstract}
+\pagebreak
+\tableofcontents
+\pagebreak
+
+
+
+\renewcommand{\headrulewidth}{0pt}
+
+\pagenumbering{arabic}
+
+
+
+\fancyhead[C]{}
+\fancyfoot[R]{\thepage}
+## Motivation und Relevanz
+
+
+
+In der heutigen Zeit verbringen Menschen in der Regel mehr Zeit damit,
+über einen Bildschirm mit Maschinen zu interagieren, anstatt Maschinen
+mechanisch zu steuern. Dieser Trend lässt sich gut bei der Automobilindustrie
+oder an Haushaltsgeräten beobachten, wo immer mehr Funktionen über einen
+Touchscreen mit einer grafischen Benutzeroberfläche (GUI) angesteuert werden.
+Über die GUI können Benutzer Funktionen wie Musik, Radio, Telefon,
+Temperaturregelung und mehr ansteuern. Ebenso kann die Öffentlichkeit am Flughafen
+oder in Restaurants über einen Selbstbedienungskiosk mit Unternehmen
+kommunizieren. Der Kiosk führt eine GUI auf einem Anzeigegerät aus und über
+den Touchscreen des Kiosks können Maschinen die Kundenwünsche erfüllen.
+Zusammenfassend lässt sich sagen, dass es in der Industrie einen zunehmenden
+Trend gibt, dass der Endverbraucher auf bequeme und effiziente Weise mit GUIs
+interagiert, um Aufgaben zu erledigen.
+
+Aus Entwicklersicht ist die Erstellung einer eleganten GUI deshalb von
+entscheidender Bedeutung, da GUIs immer mehr eine der Schlüsselkomponenten
+sind bei der Kommunikation zwischen Mensch und Maschine. Benutzeroberflächen
+für eingebettete Linux Systeme zu entwickeln ist jedoch ein komplexer Prozess
+bei dem das meist genutzte Anwendungsframework und GUI-Toolkit Qt ist, welches
+speziell für den Einsatz in eingebetteten Systemen aber teils hohe
+Lizenzkosten mit sich bringt und in der Entwicklung aufwendig ist aufgrund
+der Nutzung von C++ und traditionellen Designmethoden. Besonders die
+Entwicklung von Benutzeroberflächen, die sich für Nutzer so vertraut wie beim
+Smartphone per Toucheingabe steuern lassen, kann eine große Hürde darstellen.
+Googles neuartiges quelloffenes Benutzerschnittstellen-Entwicklungs-Kit Flutter
+bietet hier ein großes Potential für die Entwicklung von GUIs für eingebettete
+Linux Systeme, da es besondere Eigenschaften besitzt, die die Entwicklung
+vereinfachen können. So ist Flutter frei von jeglichen Lizenzkosten, speziell
+für die Entwicklung von Benutzeroberflächen für Touchscreens stärker optimiert
+und erlaubt es dank einer Hot-Reload Funktion Änderungen an dem Programm in
+Echtzeit zu sehen und auszutesten. Zudem wird Flutter mit der Programmiersprache
+Dart entwickelt, die im Vergleich zu C++ einfacher zu erlernen ist.
+
+In Hinsicht dessen soll in dieser Bachelorarbeit untersucht werden, ob Flutter
+als Entwicklungsplattform für eingebettete Linux Systeme geeignet ist. Denn
+neben dem Potenzial für Unternehmen kann es auch besonders interessant für
+Hochschulprojekte sein, weil Studenten sich potenziell einfacher in die
+Entwicklung einarbeiten könnten und die BSD Lizenzierung bei Flutter attraktiv ist.
+## Ziel der Arbeit
+
+Die Arbeit beschäftigt sich im Wesentlichen mit der Entwicklung einer
+prototypischen Anwendung mit Flutter für ein eingebettetes Linux System.
+Dabei soll ein Konzept ausgearbeitet werden, dass zeigt wie Flutter in
+eingebetteten Linux Systemen genutzt werden kann und es soll anhand der
+prototypischen Anwendung untersucht werden, wie gut Flutter für diesen
+Verwendungszweck geeignet ist. Die Ergebnisse der Untersuchung sollen
+dann genutzt werden um Empfehlungen für die Nutzung von Flutter in
+eingebetteten Linux Systemen abzuleiten.
+# Flutter
+
+## Einleitung
+
+Flutter ist ein
+
+- Flutter's core design principles center on a declarative,
+ reactive UI paradigm, where the developer defines the desired
+ interface state, and the framework efficiently handles updates
+
+## Architektur
+
+{#id .class width=400}
+
+\begin{figure}[ht]
+\centering
+\includegraphics[scale=1]{assets/flutter/archdiagram.png}
+\caption{Example caption}
+
+\caption*{Source: me}
+\end{figure}
+
+## Key Design Concepts
+
+### Deklarative Programmierung
+
+Deklarative Programmierung ist ein Programmierparadigma
+
+\lstinputlisting[language=Java, caption=Beispiel öpvn, linerange={65-73}]
+{code/flutter_architecture/lib/main.dart}
+
+# Yocto Environment
+
+## Poky
+
+## Metadata
+
+## Open-Embedded Project
+
+## Bitbake
+
+## Board support package
+
+## Meta-Flutter
+
+# Setting up the build environment and building the image
+
+# Flashing the image on Target
+
+
+# Flutter
+
+Die zunehmende Verbreitung mobiler Geräte und Betriebssysteme
+stellt die effiziente Anwendungsentwicklung vor Herausforderungen.
+Plattformübergreifende Frameworks wie Flutter zielen darauf ab,
+diese Herausforderungen zu mildern, indem sie ein einheitliches
+Toolset zum Erstellen von Benutzeroberflächen (UIs) bereitstellen,
+die nahtlos über verschiedene Plattformen hinweg funktionieren.
+Dieses Kapitel befasst sich mit der grundlegenden Architektur,
+den Vorteilen und Überlegungen zur Verwendung von Flutter für
+die Anwendungsentwicklung. [@theflutterwayFlutterRubberDuck2022]
+
+Was ist Flutter [@FlutterArchitecturalOverviewb]
+
+test [@weiserComputer21stCentury1999]
+
+```{#test .dart .number-lines caption="Example Dart test"}
+import 'package:retry/retry.dart';
+
+final response = await retry(
+ // Make a GET request
+ () => http.get('https://google.com').timeout(Duration(seconds: 5)),
+ // Retry on SocketException or TimeoutException
+ retryIf: (e) => e is SocketException || e is TimeoutException,
+);
+print(response.body);
+```
+
+Nice Dart highlighting!
+
+
+
+WORKING :)
+# Entwicklungsumgebung
+
+## Setup und Konfiguration von Flutter
+
+## Setup von Raspberry Pi
+
+\pagebreak
+
+# Literaturverzeichnis