import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:uuid/uuid.dart'; import '../helper/input_validators.dart'; import '../models/anwendung_model.dart'; import '../models/kauf_filament_model.dart'; import '../services/get_storage_services.dart'; import 'home_controller.dart'; class AnwendungController extends GetxController { AnwendungController({required this.filamentId}); static const storageKey = 'filament_anwendungen'; final String filamentId; final storage = Get.find(); final formKey = GlobalKey(); final druckbettController = TextEditingController(); final druckController = TextEditingController(); final bauraumController = TextEditingController(); final sonstigesController = TextEditingController(); final bauraumGeschlossen = false.obs; final isSaving = false.obs; final message = RxnString(); final hasError = false.obs; final filament = Rxn(); final anwendungen = [].obs; @override void onInit() { super.onInit(); final filamente = storage .getModelList(HomeController.storageKey) .map(KaufFilamentModel.fromJson) .toList(); filament.value = filamente.firstWhereOrNull( (item) => item.filamentId == filamentId, ); final profiles = storage .getModelList(storageKey) .map(AnwendungModel.fromJson) .where((item) => item.filamentId == filamentId) .toList() ..sort((a, b) => b.erstelltAm.compareTo(a.erstelltAm)); if (profiles.isNotEmpty) { final profile = profiles.first; anwendungen.assignAll([profile]); druckbettController.text = profile.druckbettTemperatur.toString(); druckController.text = profile.druckTemperatur.toString(); bauraumController.text = profile.bauraumTemperatur?.toString() ?? ''; sonstigesController.text = profile.sonstiges; bauraumGeschlossen.value = profile.bauraumGeschlossen; } } Future saveAnwendung() async { if (isSaving.value || filament.value == null) return; if (!(formKey.currentState?.validate() ?? false)) return; isSaving.value = true; message.value = null; try { final existing = anwendungen.firstOrNull; final entry = AnwendungModel( anwendungId: existing?.anwendungId ?? const Uuid().v4(), filamentId: filamentId, erstelltAm: existing?.erstelltAm ?? DateTime.now(), druckbettTemperatur: InputValidators.number(druckbettController.text)!, druckTemperatur: InputValidators.number(druckController.text)!, bauraumGeschlossen: bauraumGeschlossen.value, bauraumTemperatur: InputValidators.number(bauraumController.text), sonstiges: sonstigesController.text.trim(), ); final entries = storage.getModelList(storageKey); await storage.saveModelList(storageKey, [ ...entries.where((item) => item['filamentId'] != filamentId), entry.toJson(), ]); anwendungen.assignAll([entry]); if (Get.isRegistered()) { Get.find().loadProfile(); } hasError.value = false; message.value = 'Verarbeitungsprofil gespeichert.'; } catch (_) { hasError.value = true; message.value = 'Speichern fehlgeschlagen. Bitte erneut versuchen.'; } finally { isSaving.value = false; } } @override void onClose() { druckbettController.dispose(); druckController.dispose(); bauraumController.dispose(); sonstigesController.dispose(); super.onClose(); } }