Appearance
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
