Skip to content

Kapitel 15: Fortgeschrittene Praxis

Praxis 4: Einfaches Datennilter-Tool

15.1 Anforderungsanalyse

Implementiere Datennilterung, -sortierung und -abbildung, die verschiedene Datentypen unterstützt.

15.2 Kernimplementierung

dart
// Generische Filterfunktion
List<T> filtern<T>(List<T> daten, bool Function(T) bedingung) {
  return daten.where(bedingung).toList();
}

// Generische Sortierfunktion
List<T> sortieren<T>(List<T> daten, int Function(T, T) vergleich) {
  daten.sort(vergleich);
  return daten;
}

// Generische Abbildungsfunktion
List<R> abbilden<T, R>(List<T> daten, R Function(T) funktion) {
  return daten.map(funktion).toList();
}

void main() {
  List<int> zahlen = [3, 1, 4, 1, 5, 9, 2, 6];
  
  // Filtern: gerade Zahlen
  var gerade = filtern(zahlen, (z) => z % 2 == 0);
  print('Gerade: ' + gerade.toString());
  
  // Sortieren
  sortieren(zahlen, (a, b) => a.compareTo(b));
  print('Sortiert: ' + zahlen.toString());
  
  // Abbilden: Quadrat
  var quadrate = abbilden(zahlen, (z) => z * z);
  print('Quadrate: ' + quadrate.toString());
}

15.3 Allgemeine Tool-Funktionen kapseln

  • Implementiere wiederverwendbare Tool-Funktionen
  • Unterstütze Kettenaufrufe
  • Füge Fehlerbehandlung hinzu

Praxis 5: Dart und Flutter Basis-Verbindung

15.4 Anforderungsanalyse

Verwende Dart-Syntax, um grundlegende Flutter-Komponenten-Logik zu schreiben (Zustandsverwaltung, Ereignisbehandlung).

15.5 Kernimplementierung

dart
// Flutter-ähnliche Zustandsverwaltung simulieren
class StateManager<T> {
  T _state;
  List<void Function(T)> _listeners = [];
  
  StateManager(this._state);
  
  T get state => _state;
  
  void setState(T newState) {
    _state = newState;
    _benachrichtigeListener();
  }
  
  void addListener(void Function(T) listener) {
    _listeners.add(listener);
  }
  
  void _benachrichtigeListener() {
    for (var listener in _listeners) {
      listener(_state);
    }
  }
}

// Ereignisbehandlung simulieren
typedef EventHandler = void Function(Map<String, dynamic>);

class EventBus {
  Map<String, List<EventHandler>> _events = {};
  
  void on(String event, EventHandler handler) {
    if (!_events.containsKey(event)) {
      _events[event] = [];
    }
    _events[event]!.add(handler);
  }
  
  void emit(String event, Map<String, dynamic> data) {
    if (_events.containsKey(event)) {
      for (var handler in _events[event]!) {
        handler(data);
      }
    }
  }
}

void main() {
  // Zustandsverwaltung testen
  var stateManager = StateManager<int>(0);
  
  stateManager.addListener((state) {
    print('Zustand geändert: ' + state.toString());
  });
  
  stateManager.setState(1);
  stateManager.setState(2);
  
  // Ereignisbehandlung testen
  var eventBus = EventBus();
  
  eventBus.on('buttonClick', (data) {
    print('Button geklickt: ' + data.toString());
  });
  
  eventBus.emit('buttonClick', {'x': 100, 'y': 200});
}

15.6 Dart-Logik für Flutter-Seiten implementieren

  • Simuliere Flutter-Widget-Struktur
  • Implementiere Zustandsaktualisierung
  • Verarbeite Benutzereingaben

Frei für alle Anfänger