165 lines
5.1 KiB
Dart
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();
|
|
}
|
|
}
|