{"id":127,"date":"2021-03-09T10:00:00","date_gmt":"2021-03-09T10:00:00","guid":{"rendered":"http:\/\/erdbeerbeet.com\/?p=127"},"modified":"2021-08-26T19:28:29","modified_gmt":"2021-08-26T19:28:29","slug":"my-flutter-flight-tab-navigation","status":"publish","type":"post","link":"https:\/\/erdbeerbeet.com\/de\/my-flutter-flight-tab-navigation","title":{"rendered":"Meine Flutter-Fahrt &#8211; Tab-Navigation"},"content":{"rendered":"\n<p id=\"block-5d42cd65-5d85-415f-aecf-7328f7ba1ba4\">Diese Beitragsreihe entsteht um die Entstehung meiner n\u00e4chsten Flutter-App zu dokumentieren. Bisher habe ich bereits eine in den Stores, aber das Framework \u00e4ndert sich momentan so regelm\u00e4\u00dfig, dass einige Umsetzungen schon wieder veraltet sind. Auch wenn die hier dokumentierten das auch bald sein m\u00f6gen, m\u00f6chte ich m\u00f6glichst viele Aha-Momente hervorrufen und hoffe, dass einige von euch ihren Nutzen hieraus ziehen.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"block-b08b53a4-9d86-43bf-8a0f-0e5fa5742b7b\">Das Problem<\/h2>\n\n\n\n<p>Ich beginne ein solches Projekt immer mit einer Reihe von Skizzen der Screens. Die werde ich hier nicht zur Schau stellen, aber ich halte fest, dass viele Apps aus mehreren Screens bestehen, zwischen denen der Benutzer navigieren m\u00f6chte.<br>F\u00fcr mich ist es ein erster Fertigstellungs-Schritt, alle Screens angelegt und per Navigation verbunden zu haben. Als n\u00e4chstes kann ich dann daf\u00fcr sorgen, dass der Inhalt mit Leben, Bildern und Funktionalit\u00e4t angereichert wird.<\/p>\n\n\n\n<p id=\"block-aba0128a-778b-4662-9d15-81829ec39f0c\">Das Problem ist also ganz einfach: Ich h\u00e4tte gerne&#8230; drei Screens und eine h\u00fcbsche Navigation zwischen ihnen.<\/p>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<h2 class=\"wp-block-heading\" id=\"block-36491629-2d68-4cd7-a1ca-3adf602260f5\">Die Lehrbuch-L\u00f6sung<\/h2>\n\n\n\n<p>Es ist \u00fcbrigens nicht die einzige L\u00f6sung. Ich selbst habe ein wenig mit der <a href=\"https:\/\/api.flutter.dev\/flutter\/material\/BottomNavigationBar-class.html\">BottomNavigationBar<\/a> herumgespielt und mich letztendlich f\u00fcr den <a href=\"https:\/\/flutter.dev\/docs\/cookbook\/design\/tabs\">TabNavigator<\/a> entschieden. Letztendlich kommt es darauf an, was genau man erreichen m\u00f6chte.<\/p>\n\n\n\n<p>Mir war es wichtig, dass die Navigation nur in einer Datei gepflegt werden muss. Mein Beispielcode ist soweit m\u00f6glich frei von Styling und Extras, so wie man sich das von einem Tutorial w\u00fcnscht.<\/p>\n<\/div><\/div>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<h2 class=\"wp-block-heading\" id=\"block-d2e93124-45a6-4b2d-a8f8-01b11233a06b\">Das Programmieren<\/h2>\n\n\n\n<p>Neben dem Erstellen eines neuen Flutter-Projects braucht es f\u00fcr die Tab-Navigation keine weiteren Dependencies.<\/p>\n\n\n\n<p>Sobald ich heraus gefunden habe, wie ich hier sch\u00f6n auf mein Git-Projekt verlinke, werde ich das \u00fcbrigens tun.<\/p>\n<\/div><\/div>\n\n\n\n<p id=\"block-3b481981-d492-4457-b8a5-6f2ba7f70cec\"><strong>main.dart<\/strong><\/p>\n\n\n\n<pre id=\"block-2af61835-89d4-46e0-8f24-0e81f3aedfe3\" class=\"wp-block-code\"><code>void main() {<br>  runApp(App());<br>}<\/code><\/pre>\n\n\n\n<p id=\"block-518a5110-ac7f-4f40-8633-ea3d8450c88c\"><strong>app.dart<\/strong><\/p>\n\n\n\n<pre id=\"block-8c4ab0a7-fb13-4268-85e1-6b7db7d75da4\" class=\"wp-block-code\"><code>class App extends StatelessWidget {<br><br>  @override<br>  Widget build(BuildContext context) {<br><br>    return new MaterialApp(<br>        title: 'AppTitle',<br>        home: DefaultTabController(<br>            length: 3,<br>            child: Scaffold(<br>              appBar: AppBar(<br>                title: Text('Tab Navigation'),<br>                bottom: TabBar(<br>                  tabs: &#91;<br>                    Tab(icon: Icon(Icons.home_filled), text: 'Home',),<br>                    Tab(icon: Icon(Icons.edit_outlined), text: 'Projects'),<br>                    Tab(icon: Icon(Icons.settings), text: 'Settings'),<br>                  ],<br>                ),<br>              ),<br>              body: TabBarView(<br>                children: &#91;<br>                  HomeScreen(),<br>                  ProjectsScreen(),<br>                  SettingsScreen(),<br>                ],<br>              ),<br>            )<br>        )<br>    );<br>  }<br>}<\/code><\/pre>\n\n\n\n<p>Ich habe mich f\u00fcr eine Navigation \u00fcber drei Screens entschieden. Deren Dateien sind in einem separaten Ordner ui\/screens\/. Ich stelle nur eine von ihnen vor, da sie bisher &#8211; bis auf den Textinhalt &#8211; nahezu identisch sind.<\/p>\n\n\n\n<p id=\"block-95795be1-83f0-4fca-abd4-048e547f6323\"><strong>home_screen.dart<\/strong><\/p>\n\n\n\n<pre id=\"block-64e755b3-0202-4333-823f-793d7cb24680\" class=\"wp-block-code\"><code>class HomeScreen extends StatefulWidget {<br>  @override<br>  State&lt;StatefulWidget&gt; createState() =&gt; HomeScreenState();<br>}<br><br>class HomeScreenState extends State&lt;HomeScreen&gt; {<br><br>  @override<br>  Widget build(BuildContext context) {<br>    return Text('Goal');<br>  }<br><br>}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"block-72d0e3c0-d4f1-431b-a587-3ce37857c452\">Das Ergebnis<\/h2>\n\n\n\n<p id=\"block-2ea16e33-45dc-4f56-9721-6beaf09660cc\">Das Ergebnis ist kein besonders aufregendes, aber man kann hin und her klicken und sich \u00fcber das freuen, was man mit einem Tag Arbeit schon geschafft hat.<\/p>\n\n\n\n<figure class=\"wp-block-image wp-duotone-duotone-2\" id=\"block-3c083187-2aa2-4028-a011-1f5563085bab\"><img decoding=\"async\" src=\"http:\/\/erdbeerbeet.com\/wp-content\/uploads\/2021\/03\/Bildschirmfoto-2021-03-08-um-21.27.42-773x1024.png\" alt=\"This image has an empty alt attribute; its file name is Bildschirmfoto-2021-03-08-um-21.27.42-773x1024.png\"\/><\/figure>\n\n\n\n<div class=\"wp-block-group\"><div class=\"wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow\">\n<p id=\"block-02e0a276-6556-47d6-87ee-8318cabb8d37\">Ich hoffe, dass die Dokumentation auf diesem Blog mir hilft, am Ball zu bleiben. Mal schauen, was als n\u00e4chstes kommt, auf jeden Fall sind \u00dcbersetzung, Werbung, Verlinkung und Konten geplant&#8230;<\/p>\n\n\n\n<p>Gibt es jemanden, der gerne seine Lieblings-Navigation vorstellen will?<\/p>\n<\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Mein erster Schritt in den meisten Projekten besteht aus einigen Skizzen &#8211; gefolgt von der Implementation deer ben\u00f6tigten Screens und der Navigation zwischen ihnen.<\/p>\n","protected":false},"author":1,"featured_media":384,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13,12],"tags":[16,14,15],"class_list":["post-127","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-flutter","category-programming","tag-app","tag-flutter","tag-navigation"],"translation":{"provider":"WPGlobus","version":"3.0.0","language":"de","enabled_languages":["en","de"],"languages":{"en":{"title":true,"content":true,"excerpt":true},"de":{"title":true,"content":true,"excerpt":true}}},"_links":{"self":[{"href":"https:\/\/erdbeerbeet.com\/de\/wp-json\/wp\/v2\/posts\/127","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/erdbeerbeet.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/erdbeerbeet.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/erdbeerbeet.com\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/erdbeerbeet.com\/de\/wp-json\/wp\/v2\/comments?post=127"}],"version-history":[{"count":6,"href":"https:\/\/erdbeerbeet.com\/de\/wp-json\/wp\/v2\/posts\/127\/revisions"}],"predecessor-version":[{"id":398,"href":"https:\/\/erdbeerbeet.com\/de\/wp-json\/wp\/v2\/posts\/127\/revisions\/398"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/erdbeerbeet.com\/de\/wp-json\/wp\/v2\/media\/384"}],"wp:attachment":[{"href":"https:\/\/erdbeerbeet.com\/de\/wp-json\/wp\/v2\/media?parent=127"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/erdbeerbeet.com\/de\/wp-json\/wp\/v2\/categories?post=127"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/erdbeerbeet.com\/de\/wp-json\/wp\/v2\/tags?post=127"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}