filament_verwaltung/lib/controllers/edit_controller.dart
2026-01-15 13:44:48 +01:00

165 lines
5.1 KiB
Dart

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<FilamentModel?> originalFilament = Rx<FilamentModel?>(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<FormState>();
final isSaving = false.obs;
// Available options
final List<String> filamentTypes = [
'PLA',
'ABS',
'PETG',
'TPU',
'ASA',
'Nylon',
'PC',
'PVA',
];
final List<String> 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<void> 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();
}
}