import 'package:flutter/material.dart'; import 'package:get/get.dart'; import '../model/filament_model.dart'; import '../helpers/filament_repository.dart'; class EditController extends GetxController { Rx originalFilament = Rx(null); // Form Controllers final nameController = TextEditingController(); final typeController = TextEditingController(); final colorController = TextEditingController(); final weightController = TextEditingController(); final weightUsedController = TextEditingController(); final priceController = TextEditingController(); final manufacturerController = TextEditingController(); final purchaseDateController = TextEditingController(); final notesController = TextEditingController(); final piecesController = TextEditingController(); final printingTempController = TextEditingController(); final bedTempController = TextEditingController(); // Validation final formKey = GlobalKey(); final isSaving = false.obs; // Available options final List filamentTypes = [ 'PLA', 'ABS', 'PETG', 'TPU', 'ASA', 'Nylon', 'PC', 'PVA', ]; final List availableColors = [ 'White', 'Black', 'Red', 'Blue', 'Green', 'Yellow', 'Orange', 'Purple', 'Pink', 'Grey', 'Brown', ]; @override void onInit() { if (Get.arguments != null && Get.arguments['filament'] != null) { originalFilament.value = Get.arguments['filament']; _populateForm(); } super.onInit(); } void _populateForm() { final filament = originalFilament.value; if (filament != null) { nameController.text = filament.name; typeController.text = filament.type; colorController.text = filament.color; weightController.text = filament.weight.toString(); weightUsedController.text = filament.weightUsed.toString(); priceController.text = filament.price.toString(); manufacturerController.text = filament.manufacturer ?? ''; purchaseDateController.text = filament.purchaseDate ?? ''; notesController.text = filament.notes ?? ''; piecesController.text = filament.pices?.toString() ?? ''; printingTempController.text = filament.printingTemp?.toString() ?? ''; bedTempController.text = filament.bedTemp?.toString() ?? ''; } } Future saveFilament() async { if (!formKey.currentState!.validate()) return; isSaving.value = true; try { final updatedFilament = FilamentModel( id: originalFilament.value?.id ?? DateTime.now().millisecondsSinceEpoch.toString(), name: nameController.text.trim(), type: typeController.text.trim(), color: colorController.text.trim(), weight: double.tryParse(weightController.text) ?? 0, weightUsed: double.tryParse(weightUsedController.text) ?? 0, price: double.tryParse(priceController.text) ?? 0, manufacturer: manufacturerController.text.trim().isEmpty ? null : manufacturerController.text.trim(), purchaseDate: purchaseDateController.text.trim().isEmpty ? null : purchaseDateController.text.trim(), notes: notesController.text.trim().isEmpty ? null : notesController.text.trim(), pices: int.tryParse(piecesController.text), printingTemp: int.tryParse(printingTempController.text), bedTemp: int.tryParse(bedTempController.text), ); bool success; if (originalFilament.value != null) { success = await FilamentRepository.to.updateFilament(updatedFilament); } else { success = await FilamentRepository.to.createFilament(updatedFilament); } if (success) { Get.back(result: updatedFilament); Get.snackbar( 'Erfolg', originalFilament.value != null ? 'Filament wurde aktualisiert' : 'Filament wurde erstellt', snackPosition: SnackPosition.BOTTOM, backgroundColor: Get.theme.colorScheme.primary.withAlpha(26), colorText: Get.theme.colorScheme.primary, ); } else { Get.snackbar( 'Fehler', 'Filament konnte nicht gespeichert werden', snackPosition: SnackPosition.BOTTOM, backgroundColor: Colors.red.withAlpha(26), colorText: Colors.red, ); } } catch (e) { Get.snackbar( 'Fehler', 'Ein Fehler ist aufgetreten: $e', snackPosition: SnackPosition.BOTTOM, backgroundColor: Colors.red.withAlpha(26), colorText: Colors.red, ); } finally { isSaving.value = false; } } @override void onClose() { nameController.dispose(); typeController.dispose(); colorController.dispose(); weightController.dispose(); weightUsedController.dispose(); priceController.dispose(); manufacturerController.dispose(); purchaseDateController.dispose(); notesController.dispose(); piecesController.dispose(); printingTempController.dispose(); bedTempController.dispose(); super.onClose(); } }