Layout-Widgets

Layout widgets

Der Grundgerüst der Layout in Flutter befindet sich im Scaffold-Widget. Das Ganze besteht aus nebeneinander stehenden oder in einander verschachtelten Widgets.

Multi-Child Widgets: Column(), Row(), Stack(), Wrap(), GridView() …

Single-Child Widgets: Center(), Align(), Baseline(), ConstrainedBox(), Container() …

Strukturieren:

SafeArea()
Wrap()

Container()
Column()
Row()

Expanded()
Flexible()

Stack(), 
IndexedStack()

Ausrichtung & Abstände:

Center()
Align()
Positioned()
BaseLine()
Padding()

Spacer()
SizedBox()

Scrollen:

ListView()
ListView.builder()
GridView()
GridView.builder()
SingleChildScrollView()
Scrollbar()
PageView()
Slivers (AppBar(), List Grid() …)

Dart (Konzepte)

grundlegenden Konzepte der Dart als Programmiersprache

Dart ist eine von Google entwickelte Programmiersprache, die sich besonders für die Entwicklung von Web-, Desktop- und mobilen Anwendungen eignet. Hier sind einige der Grundlagen von Dart:

Typisierung: Dart ist eine stark typisierte Programmiersprache, was bedeutet, dass jede Variable und jeder Ausdruck einen spezifischen Datentyp hat. Es unterstützt sowohl statische Typisierung als auch Typinferenz.
Variablen und Datentypen: Dart bietet verschiedene Datentypen wie int, double, String, bool, List, Set, Map usw. Du kannst Variablen mit dem var-Schlüsselwort deklarieren, oder den Datentyp explizit angeben.

Funktionen: Funktionen in Dart werden mit dem functionName(parameters) => expression; Syntax definiert. Dart unterstützt auch benannte Parameter und Default-Parameterwerte.

Klassen und Objekte: Dart ist eine objektorientierte Programmiersprache. Du kannst Klassen mit Methoden und Eigenschaften definieren. Die Konstruktoren können überladen werden, und die Vererbung wird ebenfalls unterstützt.
Kontrollstrukturen: Dart bietet Kontrollstrukturen wie if, else, switch, while, for, usw., um den Programmfluss zu steuern.

Packages und Imports: Dart ermöglicht die Verwendung von Paketen, die Funktionen und Klassen aus wiederverwendbarem Code enthalten. Du kannst Pakete über die import-Anweisung in deinem Code einbinden.

Async/Await: Dart unterstützt asynchrone Programmierung mithilfe von async und await. Dadurch können asynchrone Aufgaben wie Netzwerkanfragen ohne blockierenden Code ausgeführt werden.

Schnittstellen für verschiedene Plattformen: Dart kann für die Entwicklung von Webanwendungen mit dem „Dart Web“ SDK, für mobile Apps mit dem „Flutter“ Framework und für serverseitige Anwendungen mit dem „Dart VM“ verwendet werden.

Null-Sicherheit: Dart hat eine Option für Null-Sicherheit eingeführt, um Fehler durch null-Werte (Null-Referenzen) zur Laufzeit zu verhindern. Dies hilft bei der Erstellung robusterer und fehlerfreier Codebasis.

Entwicklungsumgebungen: Dart kann in verschiedenen Entwicklungsumgebungen wie dem Dart SDK, Visual Studio Code mit der Dart-Erweiterung und anderen IDEs entwickelt werden.

Dart-Projekt in der Konsole

#Command-line and server apps
dart консольный проект
после инсталляции dart-sdk в zsh:

==> Caveats
Please note the path to the Dart SDK:
/usr/local/opt/dart/libexec
==> Summary
🍺 /usr/local/Cellar/dart/2.19.6: 1,040 files, 639.9MB, built in 29 seconds
==> Running `brew cleanup dart`…
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).

https://dart.dev/tutorials/server/get-started

Dart: Variablen

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// DART-SPIELWIESE (Listing 1.1)

void main() {  // main(): Einstiegspunkt einer Dart-Anwendung
 
  print('Hallo Dart');
  // Info: es gibt in Dart KEINE char wie Java für einzelne Zeichen
  // alles ist quasi ein String wenn Anführungszeichen benutzt werden
 
  // einzeiliger Kommentar
 
  /*
   *
   *  mehrzeiliger Kommentar
   *
  */

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
// DART-SPIELWIESE (Listing 1.1)

void main() {  // main(): Einstiegspunkt einer Dart-Anwendung
 
  print('Hallo Dart');
  // Info: es gibt in Dart KEINE char wie Java für einzelne Zeichen
  // alles ist quasi ein String wenn Anführungszeichen benutzt werden
 
  // einzeiliger Kommentar
 
  /*
   *
   *  mehrzeiliger Kommentar
   *
  */
 
  //
  // VARIABLEN (Container um Daten bzw. Werte abzulegen)
  //
  // in Dart werden Variablen mit dem Schlüsselwort var deklariert
 
  // Hinweis: wenn wir keinen Wert zuweisen
  // dann entscheidet Dart für uns bzw. machen die Variable "dynamic"
 
  var x;  // noch keinen Wert zugewiesen
  print(x);  // null (Variable OHNE Wert)
  // jederzeit den aktuellen Datenytyp einer Variable zur Laufzeit ausgeben
  print(x.runtimeType);  // Null (kein Datentyp festgelegt)
 
  // einer Variable einen Wert zuweisen: also initialisieren
  // Beispiel: y mit Wert 42 (also Ganzzahl bzw. int)
  var y = 42;  // int-Objekt
  print(y.runtimeType);  // int
 
  //print(z);  // undefined, also Error weil z vorher nicht definiert wurde
 
  // direkte Werte ausgeben an Konsole OHNE Zwischenweg über Variablen
  print(42);
  print('42');
 
  // Datentyp String
  // Beispiel Variable erzeugen namens "vorname" mit Wert "Peter"
  var vorname = 'Peter';
  print(vorname);
 
  // Spezialfall "dynamic" (Vorteil: Flexibilität)
  dynamic z;  // ohne Wertzuweisung
  z = 5;
  z = "Hugo";
  print(z);
  print(z.runtimeType);
  // per dynamic zur Laufzeit zB statt eines int-Wert einen String-Wert zuweisen
 
  // Hinweis: warum wird Datentyp "int" klein geschrieben
  // Historische Gründe, d.h. int ist zwar KEIN primitiver Datentyp
  // sondern ein Objekt der Klasse int, aber in Java nutzt man auch diese Schreibweise für int, double,...
 
  //int zahl = 7;
 
  //
  // DATENTYPEN
  //
 
  /*
   *  int       Ganzzahl                      5, -13, 0
   *  double    Fließkommazahl                3.14, -18.0, 13.999
   *  num       Numerisch                     3.14, 5
   *  (Kombi aus Ganz-und Kommazahl)
   *  bool      Boolean / Wahrheitswert       true, false
   *  String    Zeichenkette                  'Bob', "Pete"
   *  List      Liste mit mehren Elementen bzw. Array        ['Berlin', 'Hamburg', 55]
   *  Map       Schlüssel/Werte-Paare (key/value)     {'x':8, 'y':16}
   *  dynamic   jeder Typ (flexibel)
   *
  */
 
  // Beispiel mit num:
  num zahl = 5;
  zahl = 3.14;
  print(zahl);
 
  //double a;
 
  // leere Variablen erzeugen zu den jew. oben genannten Datentypen
  int alter;
  double gewicht;
  bool istOnline;  // camelCase-Schreibweise
  String name;
  List hobbies;
  Map json;
 
  dynamic ort = 'Hamburg';
  ort = 100;
 
}