import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:uuid/uuid.dart'; import '../models/kauf_filament_model.dart'; import '../services/get_storage_services.dart'; class HomeController extends GetxController { static const storageKey = 'kauf_filamente'; final storage = Get.find(); final uuid = const Uuid(); final filamente = [].obs; final formKey = GlobalKey(); final haendlerController = TextEditingController(); final farbeController = TextEditingController(); final preisController = TextEditingController(); final markeController = TextEditingController(); final gewichtController = TextEditingController(); final kaufdatum = DateTime.now().obs; final material = 'PLA'.obs; final editingId = RxnString(); final materialien = [ 'PLA', 'PLA+', 'PLA light', 'PLA-CF', 'PLA+', 'PETG', 'PETG-CF', 'ABS', 'ASA', 'TPU', 'Sonstiges', ]; @override void onInit() { super.onInit(); loadFilamente(); } void loadFilamente() { final data = storage.getModelList(storageKey); filamente.assignAll( data.map(KaufFilamentModel.fromJson), ); sortFilamente(); } void sortFilamente() { filamente.sort( (a, b) => b.kaufdatum.compareTo(a.kaufdatum), ); } Future persist() async { await storage.saveModelList( storageKey, filamente.map((f) => f.toJson()).toList(), ); } Future saveFilament() async { if (!formKey.currentState!.validate()) return; final preis = double.tryParse( preisController.text.trim().replaceAll(',', '.'), ); if (preis == null || !preis.isFinite || preis < 0) { Get.snackbar('Ungültiger Preis', 'Bitte Preis überprüfen.'); return; } final filament = KaufFilamentModel( filamentId: editingId.value ?? uuid.v4(), marke: markeController.text.trim(), kaufdatum: kaufdatum.value, haendler: haendlerController.text.trim(), material: material.value, preis: preis, farbe: farbeController.text.trim(), gewicht: gewichtController.text.trim().isEmpty ? '1kg' : gewichtController.text.trim(), ); if (editingId.value == null) { filamente.add(filament); } else { final index = filamente.indexWhere( (f) => f.filamentId == editingId.value, ); if (index < 0) { Get.snackbar('Fehler', 'Datensatz nicht gefunden.'); return; } filamente[index] = filament; } sortFilamente(); await persist(); resetForm(); } void editFilament(KaufFilamentModel filament) { editingId.value = filament.filamentId; kaufdatum.value = filament.kaufdatum; markeController.text = filament.marke; haendlerController.text = filament.haendler; material.value = filament.material; preisController.text = filament.preis.toStringAsFixed(2); farbeController.text = filament.farbe; gewichtController.text = filament.gewicht; } Future duplicateFilament( KaufFilamentModel filament, ) async { filamente.add( filament.copyWith(filamentId: uuid.v4()), ); sortFilamente(); await persist(); } Future deleteFilament(String filamentId) async { filamente.removeWhere((f) => f.filamentId == filamentId); if (editingId.value == filamentId) resetForm(); await persist(); } void resetForm() { editingId.value = null; haendlerController.clear(); markeController.clear(); farbeController.clear(); preisController.clear(); kaufdatum.value = DateTime.now(); material.value = 'PLA'; gewichtController.clear(); formKey.currentState?.reset(); } @override void onClose() { haendlerController.dispose(); markeController.dispose(); farbeController.dispose(); preisController.dispose(); gewichtController.dispose(); super.onClose(); } }