Flutter 101

Projektentwicklung mit Flutter

© Dominik Schumann - 2023 - fv.doryphmo.com

Wer bin ich?

  • Name: Dominik Schumann
  • Job: Software Engineer
  • Arbeitgeber: Maibornwolff
  • Abschluss: Bachelor of Science @ HWR
© Dominik Schumann - 2023 - fv.doryphmo.com

Wichtige Links

Material Design
Flutter Documentation Our Repo Material Design
© Dominik Schumann - 2023 - fv.doryphmo.com

Kontakt

e_schumannd@doz.hwr-berlin.de

© Dominik Schumann - 2023 - fv.doryphmo.com

Quick Recap

  • Was ist letztes Mal geschehen
  • Tempo Einschätzung
© Dominik Schumann - 2023 - fv.doryphmo.com
Ändern von Stateful Widgets Stateless Widgets
Parametern ✔️ ✔️
Membern ✔️ ❌
© Dominik Schumann - 2023 - fv.doryphmo.com

© Dominik Schumann - 2023 - fv.doryphmo.com

BuildContext

  • kurz gequatscht
  • noch tieferer Einblick now
© Dominik Schumann - 2023 - fv.doryphmo.com

Was ist die Flutter Widget Hirarchie?

© Dominik Schumann - 2023 - fv.doryphmo.com

© Dominik Schumann - 2023 - fv.doryphmo.com

© Dominik Schumann - 2023 - fv.doryphmo.com

Das funktioniert:

class MyContent extends StatelessWidget{
    //...
    Widget build(BuildContext context) {
        return Text(BlocProvider.of<Bloc>(context).state.count);
    }
}

Das nicht:

FloatingActionButton(
  child: Text(BlocProvider.of<Bloc>(context).state.count),
)
© Dominik Schumann - 2023 - fv.doryphmo.com

Dart Null Awareness

  • zwei Arten von DatenTypen:
final String? name; //nullable
final String appName; //non-nullable

final String test = name; //Error
© Dominik Schumann - 2023 - fv.doryphmo.com

Dart Null Awareness

  • zwei Arten von DatenTypen:
final String? name; //nullable
final String appName; //non-nullable

final String test = name; //Error
  • neue Operatoren, ?., ??:
final String test = name ?? appName; // default value
final int? length = name?.length; // name = null -> return null
© Dominik Schumann - 2023 - fv.doryphmo.com

Important Keywords

  • final - nach initialisierung immutable
  • late - vor Nutzung definiert, immutable
  • const - sofort initialisieren, immutable
  • var - mutable
© Dominik Schumann - 2023 - fv.doryphmo.com

3. Aufgabe

Baut ein Text Field in eure Applikation ein. Lasst in diesem einen Namen eingeben, der in der App Bar angezeigt wird. Gebt ansonsten einen Standard Namen an.

Helpful Widgets: TextField, AppBar, TextBar.onSubmitted

© Dominik Schumann - 2023 - fv.doryphmo.com

© Dominik Schumann - 2023 - fv.doryphmo.com

4. Aufgabe

Baut eine BottomNavigationBar in eure Applikation ein. Nutzt diese um mehrere Seiten anzeigen zu lassen.

Helpful Widgets: BottomNavigationBar, BottomNavigationBarItem

© Dominik Schumann - 2023 - fv.doryphmo.com

Netzwerk Funktionen

© Dominik Schumann - 2023 - fv.doryphmo.com

Meistens brauchen Apps Möglichkeiten um

  • externe Daten zu laden
  • Daten zu bearbeiten und extern zu speichern
  • Kommunikation mit anderen Nutzern
© Dominik Schumann - 2023 - fv.doryphmo.com

Was brauchen wir?

  • externe Server Kommunikation
  • Daten Serialisierung
© Dominik Schumann - 2023 - fv.doryphmo.com

HTTP

Hypertext Transfer Protocol

© Dominik Schumann - 2023 - fv.doryphmo.com

Was ist HTTP?

  • request-response protocol
  • sind teil des client-server models
  • client (App) sendet request an einen Server
© Dominik Schumann - 2023 - fv.doryphmo.com

Aufgaben

Client (App)

zeigt Daten an, schickt aktualisierte Daten

Server

Haushaltet Daten, bestenfalls steuert App Inhalt

© Dominik Schumann - 2023 - fv.doryphmo.com

Request Methoden

  • GET: nur Daten anfragen
  • POST: Daten schicken, Daten erhalten auf dessen Grundlage
  • PUT: Daten schicken mit dem intent, dass diese gespeichert werden
  • DELETE: Daten löschen
© Dominik Schumann - 2023 - fv.doryphmo.com

© Dominik Schumann - 2023 - fv.doryphmo.com

JSON

© Dominik Schumann - 2023 - fv.doryphmo.com

JavaScript Object Notation

  • Ist eine Art um Daten zu übertragen
  • gutes Format um Objekte zu übertragen
© Dominik Schumann - 2023 - fv.doryphmo.com

Beispiel

{
  "foo": "bar",
  "array": [1, 2, 3, 4],
  "object": {
    "test": "test"
  }
}
© Dominik Schumann - 2023 - fv.doryphmo.com

HTTP package

© Dominik Schumann - 2023 - fv.doryphmo.com

Package hinzufügen

flutter pub add http

Daten anfragen

var response = await http.get(Uri.https('dummyjson.com', 'todos'));
var todos = jsonDecode(response.body) as Map<String, dynamic>;
© Dominik Schumann - 2023 - fv.doryphmo.com

5. Aufgabe

Nutzt das http package, um eine Schnittstelle von https://dummyjson.com anzusprechen und zeigt die Daten in eurer App an.

Helpful Widgets: FutureBuilder, CircularProgressIndicator, Card, SingleChildScrollView

© Dominik Schumann - 2023 - fv.doryphmo.com

Wenn in diesem Tree ein BlocProvider eingebaut wird, können alle Widgets darunter darauf zugreifen

Aufgabe danach besprechen, Ergebnisse der Studenten zusammen anschauen und evtl. Probleme besprechen evtl. um die 30min

evtl. um die 20 min?