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, ); anwendungen.assignAll( storage .getModelList(storageKey) .map(AnwendungModel.fromJson) .where((item) => item.filamentId == filamentId), ); anwendungen.sort((a, b) => b.erstelltAm.compareTo(a.erstelltAm)); } Future saveAnwendung() async { if (isSaving.value || filament.value == null) return; if (!(formKey.currentState?.validate() ?? false)) return; isSaving.value = true; message.value = null; try { final entry = AnwendungModel( anwendungId: const Uuid().v4(), filamentId: filamentId, 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, entry.toJson()]); anwendungen.insert(0, entry); resetForm(); hasError.value = false; message.value = 'Verarbeitungsprofil gespeichert.'; } catch (_) { hasError.value = true; message.value = 'Speichern fehlgeschlagen. Bitte erneut versuchen.'; } finally { isSaving.value = false; } } void resetForm() { formKey.currentState?.reset(); druckbettController.clear(); druckController.clear(); bauraumController.clear(); sonstigesController.clear(); bauraumGeschlossen.value = false; } @override void onClose() { druckbettController.dispose(); druckController.dispose(); bauraumController.dispose(); sonstigesController.dispose(); super.onClose(); } }